【发布时间】:2020-04-20 05:36:58
【问题描述】:
这里是 Dart 新手,我目前正在学习 Dart 中的异步执行。我对 Dart 中的并发工作方式有点恼火,从他们的 codelab 中获取以下场景:
void printOrderMessage () async {
try {
var order = await fetchUserOrder();
print('Awaiting user order...');
print(order);
} catch (err) {
print('Caught error: $err');
}
}
Future<String> fetchUserOrder() {
// Imagine that this function is more complex.
var str = Future.delayed(Duration(seconds: 4), () => throw 'Cannot locate user order');
return str;
}
Future<void> main() async {
await printOrderMessage();
}
在这种情况下,异步操作是从数据库中获取用户订单。现在由于 Dart 的 await / async 机制,每个与异步操作相关的函数都需要有一个Future<> 返回类型,并且必须用async 标记。
这感觉很笨拙......想象一下,如果我的函数链深处的某个值正在异步计算,我真的需要总是返回一个未来吗?除了等待之外,还有其他一些结构可以在 Dart 中同步代码吗?还是我误解了这个概念?
【问题讨论】:
-
任何调用异步函数的东西本质上都是异步的。这就是它在 Dart、Javascript (ES6)、Typescript 和 Python 3.5+ 中的工作方式。 (如果函数不使用相应的
await语法糖,则不必声明async)
标签: asynchronous dart dart-async