wait 属性

Future<(T1, T2, T3)> wait

并行等待 futures。

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

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

如果某些 futures 在完成时发生错误,则返回的 future 会完成一个 ParallelWaitError。其中,ParallelWaitError.values 是成功 futures 的值的记录,以及有错误的 futures 为 null。而 ParallelWaitError.errors 是形状相同的记录,对于成功的 futures 数据为 null,对于有错误的 futures 数据为一个包含错误 AsyncError

实现

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

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