flutter - 如何在颤动中获得并行期货的通知
问题描述
您好,我正在使用以下代码进行并行网络调用。
List<dynamic> results = await Future.wait([
apiCall1(),
apiCall2(),
...more api calls
]);
我需要更新每个 api 调用的状态。有没有办法知道哪个 api 调用已成功完成并更新状态。
如果我.then
在个别期货中使用,结果列表包含 null。
void main() async {
Future<int> future1 = Future.delayed(Duration(seconds: 1)).then((value) => 1);
Future<int> future2 = Future.delayed(Duration(seconds: 2)).then((value) => 2);
List<dynamic> results = await Future.wait([
future1.then((value) {
print(value);
}),
future2.then((value) {
print(value);
})
]);
print(results);
}
1
2
[null, null]
解决方案
我认为最简单的方法是:
void main() async {
Future<int> future1 = apiCall1();
Future<int> future2 = apiCall2();
List<int> results = await Future.wait([
future1.then((value) {
print(value);
return value;
}),
future2.then((value) {
print(value);
return value;
})
]);
print(results);
}
Future<int> apiCall1() async {
await Future.delayed(Duration(seconds: 1));
return 1;
}
Future<int> apiCall2() async {
await Future.delayed(Duration(seconds: 2));
return 2;
}
推荐阅读
- python - 右键单击QTableView的未占用区域时如何触发事件
- amazon-web-services - AWS ElasticSearch - 添加两个数据节点后节点数翻倍
- windows - 使用快捷键/热键将打开的窗口重新排列到监视器
- sql - 连接两个没有唯一标识符的数据表
- c++ - 动态绑定和虚函数——基类对象的向量,访问“正确”的成员函数
- regex - 验证特定标识符模式
- sql - 如何在 SQL 中获取日期差异?
- javascript - 从 JS(浏览器)创建和下载一个 UTF8 纯文本文件
- azure-data-factory - 如何将CSV复制到ADF中具有带点的列标题的Json?
- sql - SQL BigQuery - 在“IN”子句中使用 WITH 视图