wait 属性

Future<List<T>> wait

并行等待 futures。

等待这个可迭代中的所有 futures。如果所有 futures 都成功,则返回一个包含结果的值的列表,其顺序与创建它们的 futures 相同。

类似于 Future.wait,但使用 ParallelWaitError 报告错误,允许调用者处理错误并在必要时销毁成功的结果。

返回的 future 在所有 futures 完成时完成。如果有任何 futures 未完成,则返回的 future 也不会完成。

如果有任何 future 以错误完成,则返回的 future 以 ParallelWaitError 完成。The ParallelWaitError.values 是成功 futures 的值的列表,对于出错 futures 是 null。The ParallelWaitError.errors 是长度相同的列表,对于成功 futures 有 null 值,对于出错 futures 有包含错误的 AsyncError

实现

Future<List<T>> get wait {
  var results = [for (var f in this) _FutureResult<T>(f)];
  if (results.isEmpty) return Future<List<T>>.value(<T>[]);
  final c = Completer<List<T>>.sync();
  _FutureResult._waitAll(results, (errors) {
    if (errors == 0) {
      c.complete([for (var r in results) r.value]);
    } else {
      var errorList = [for (var r in results) r.errorOrNull];
      c.completeError(ParallelWaitError<List<T?>, List<AsyncError?>>(
          [for (var r in results) r.valueOrNull], errorList,
          errorCount: errors, defaultError: errorList.firstWhere(_notNull)));
    }
  });
  return c.future;
}