首页 > 解决方案 > 如何在颤动中获得并行期货的通知

问题描述

您好,我正在使用以下代码进行并行网络调用。

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]

标签: flutterdartflutter-future

解决方案


我认为最简单的方法是:

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;
}

推荐阅读