Dart:多个等待同一个未来

Dart: multiple await for same future

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

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()
}

当 future 完成时,打印如下:

FunctionA finished
FunctionB finished

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

login.then(functionA).then(fucntionB)

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

没有 async/await 看起来像

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

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

login完成后,所有注册的回调将被依次调用。

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

我想你可以简单地使用:

Future.wait(
  [
    method1(),
    method2(),
  ]
).then((){});