wait 属性

Future<(T1, T2, T3, T4, T5)> wait

并行等待多个 future。

等待本记录中所有 future。如果所有 future 都成功,则返回值的记录。

返回的 future 在所有 future 完成时完成。如果任何一个 future 未完成,则返回的 future 也未完成。

如果一些 future 以错误完成,则返回的 future 以 ParallelWaitError 完成。The ParallelWaitError.values 是成功 future 的值的记录,以及错误 future 的 null。The ParallelWaitError.errors 同样形状的记录,成功的 future 有 null 值,错误的 future 有 AsyncError,其中包含完成时发生错误的 future 的错误。

实现

Future<(T1, T2, T3, T4, T5)> get wait {
  final c = Completer<(T1, T2, T3, T4, T5)>.sync();
  final v1 = _FutureResult<T1>($1);
  final v2 = _FutureResult<T2>($2);
  final v3 = _FutureResult<T3>($3);
  final v4 = _FutureResult<T4>($4);
  final v5 = _FutureResult<T5>($5);

  _FutureResult._waitAll([v1, v2, v3, v4, v5], (int errors) {
    if (errors == 0) {
      c.complete((v1.value, v2.value, v3.value, v4.value, v5.value));
    } else {
      c.completeError(ParallelWaitError(
        (
          v1.valueOrNull,
          v2.valueOrNull,
          v3.valueOrNull,
          v4.valueOrNull,
          v5.valueOrNull
        ),
        (
          v1.errorOrNull,
          v2.errorOrNull,
          v3.errorOrNull,
          v4.errorOrNull,
          v5.errorOrNull
        ),
          errorCount: errors,
          defaultError: v1.errorOrNull ??
              v2.errorOrNull ??
              v3.errorOrNull ??
              v4.errorOrNull ??
              v5.errorOrNull
      ));
    }
  });
  return c.future;
}