考虑这个(教科书)样本飞镖码:
// Sequential processing using async and await.
main() async {
await expensiveA();
await expensiveB();
doSomethingWith(await expensiveC());
}
Run Code Online (Sandbox Code Playgroud)
我知道await将等待未来"昂贵的A"的结果在继续之前完成.
但我不明白为什么main()本身必须声明为异步?显然你必须这样做,否则程序将无法编译.但为什么同步方法不能等待异步调用的结果呢?
我知道这一定是一个新手问题,但我还没有找到答案.
之前async/ await,这只是前一段时间才添加到Dart,你会写得像
main() {
var result = expensiveA()
.then((_) => expensiveB())
.then((_) => expensiveC()); // the Future returned by expensiveC will be returned because `doSomethingWith` is not awaited in your code
result.then(doSomethingWith);
return result;
}
Run Code Online (Sandbox Code Playgroud)
异步调用返回a Future,您可以将函数传递给它then在异步调用完成时调用的方法.
这段代码
main() async {
await expensiveA();
await expensiveB();
doSomethingWith(await expensiveC()); // doSomethingWith is not awaited
}
Run Code Online (Sandbox Code Playgroud)
在执行之前,将get重写为与第一个代码块中的代码类似的内容.
这表明async/ await不会改变代码的性质,它只会将语法更改为看起来更像同步代码的东西.
async是一个标记,该方法中的代码需要重写,并且这个标记允许使用await,而不重写await将没有任何意义.
async隐式返回最后一个awaited Future,以便调用者能够await完成此操作Future.因为Future返回了a ,所以强模式要求返回类型匹配.
| 归档时间: |
|
| 查看次数: |
815 次 |
| 最近记录: |