飞镖:多个等待着相同的未来

时间:2018-09-25 14:27:55

标签: dart future dart-async

我最近看过下面的一些代码示例

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)

1 个答案:

答案 0 :(得分:2)

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

在没有async / await的情况下,

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

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

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

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