实际上,在飞镖,为了在函数体中使用await
,一个需要声明的全功能async
:
import "dart:async";
void main() async {
var x = await funcTwo();
print(x);
}
funcTwo() async {
return 42;
}
此代码不会无标记main()
为async
工作
Error: Unexpected token 'await'.
但是,医生说“的await
表情评估e
,然后暂停当前正在运行的功能,直到结果准备好,也就是说,等到将来完成”(Dart Language Asynchrony Support)
所以,也许我错过的东西,但也没有必要强迫功能是异步的?什么是使异步申报义务的理由?
在async
功能await
被重写为其中.then(...)
代替await
代码。
所述改性剂async
标记这样的功能为一个具有被重写并与await
被支撑。
没有async
你会写
void main() {
return funcTwo().then((x) {
print(x);
});
}
这是一个非常简单的例子,但重写可能相当复杂,当更多的异步功能用途,如try
/ catch
,await for(...)
,...
一个问题是,await
最初并不是达特语言的一部分。为了保持与可能潜在地使用await
作为标识符现有程序的向后兼容性,该语言的设计者增加了一个机制,以明确地选择加入到使用新的关键字await
:通过添加(先前无效)构建体声明函数async
。