【发布时间】:2021-05-20 02:18:13
【问题描述】:
我编写了一个异步 Flutter/Dart 函数,在我看来它的行为出乎意料。以下代码结构:
static Future<bool> verifySometing() async {
try {
await getCloudData().then((snapshot) {
if (snapshot.exists && snapshot.hasData) {
bool dataValid = await validateData(snapshot.data);
if (dataValid) {
print('Data is correct');
return true;
}
}
});
} catch (e) {
print('Error $e');
return false;
}
print('Something went wrong');
return false;
}
预期结果是该函数等待云数据,然后等待验证,如果数据有效则返回 true。在这种情况下,控制台将显示以下内容并且函数将返回 true:
Data is correct
实际情况是控制台显示如下输出,函数先返回真,后返回假:
Data is correct
Something went wrong
这与我想知道的关于 Dart 中的函数的任何事情都背道而驰,因为我一直认为一旦触发 return,函数就完成了。任何想法这是如何发生的?
【问题讨论】:
-
请记住,当您使用
await时,您不需要使用then,反之亦然。加上await停止代码的执行,同时释放线程以进行其他工作,并且仅在等待的工作完成时继续。与then不同,它不会停止执行下面的代码。
标签: function flutter dart asynchronous async-await