我最近看过下面的一些代码示例
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)
答案 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
完成后,所有注册的回调将一个接一个地调用。
如果在调用login
时login.then((r) { ... })
已经完成,则在当前同步代码执行完成后调用回调。