dart - 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)
解决方案
您可以为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) { ... })
,则在当前同步代码执行完成后调用回调。
推荐阅读
- python - 使用 Flask 和 Google Colab 渲染 html 模板时出错
- elasticsearch - 模式捕获不适用于正斜杠
- powershell - 导出 .CSV 文件,更改与导入相同的名称和文件夹
- encryption - 使用 ColdFusion 调用 Sage Pay API 时出错
- laravel - 如何使用 eloquent laravel 过滤两个日期之间的数据?
- java - 活动随时可用
- reactjs - 如何在 JEST 中测试 Window.postMessage()?
- javascript - IndexedDB - 如何在对象存储中读取最大 ID
- python - 根据索引从一列中选择第一个值,从第二个中选择最后一个值
- node.js - 在 Express 和 Axios 中使用 JSON 发布文件(图片)