【发布时间】:2021-01-23 03:59:39
【问题描述】:
我对 Dart 还很陌生,我一直在试图理解为什么调用函数需要返回一个未来?我明白为什么被调用函数需要返回未来,而不是调用函数本身。这似乎没有意义并且混淆了逻辑。例如,假设我想要:
List<String> someFunct() async {
final _res = await someFuture();
return _res.toList();
}
如果不将调用函数的返回值包装在 Future 中,然后将这个异步模型传播到调用树上,我就无法做到这一点。调用函数不是未来,因此它不需要返回未来。
【问题讨论】:
-
在您的示例中,
someFunc直到someFuture完成后才能将值返回给它的调用者。由于someFunc必须等待,someFunc的调用者也必须等待。也许你认为someFunc可以block 直到someFuture完成,但 Dart 在每个隔离中都是单线程的。如果someFunc被阻止,那么someFuture将永远无法解决。也许你认为someFunc可以阻止并允许someFuture通过旋转它自己的事件循环来解决,但现在你会有嵌套的事件循环,这通常是坏消息(例如,它们可能导致意外的重新进入) .
标签: dart async-await