首页 > 解决方案 > Dart:多个等待相同的未来

问题描述

我最近看到了一些代码示例,如下所示

Future<Null> ensureLogin() {...}

var login = ensureLogin();

Future functionA() async {
   await login;
   print("FunctionA finished");
}

Future functionB() async {
   await login;
   print("FunctionB finished");
}

void main() {
   functionA();
   functionB()
}

当未来完成时,它会打印在下面:

FunctionA finished
FunctionB finished

看起来我们可以对同一个未来对象进行多次等待?但是这在幕后是如何工作的呢?它与 Future 等价于什么?也许像下面这样?

login.then(functionA).then(fucntionB)

标签: dartfuturedart-async

解决方案


您可以为then(...)单个Future实例注册任意数量的回调。

没有async/await它看起来像

Future functionA() async {
   login.then((r) {
     print("FunctionA finished");
   });
}

Future functionB() async {
   login.then((r) {
     print("FunctionB finished");
   });
}

完成login后,所有注册的回调将一个接一个地被调用。

如果在调用login时已经完成login.then((r) { ... }),则在当前同步代码执行完成后调用回调。


推荐阅读