如何在 flutter 中获得并行期货的通知

How to get notified for a parallel futures in flutter

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

List<dynamic> results = await Future.wait([
      apiCall1(),
      apiCall2(),
      ...more api calls
 ]);
    

我需要更新每个 api 呼叫的状态。有没有办法知道哪个 api 调用已成功完成并更新状态。

如果我在个人期货中使用 .then,结果列表包含空值。

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