wait 属性

Future<T1, T2, T3, T4> wait

并行等待多个未来的实现。

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

返回的未来在所有未来都完成后完成。如果任何一个未来没有完成,则返回的未来也不会完成。

如果有某些未来的完成伴随着错误,则返回的未来将以 ParallelWaitError 完成。 ParallelWaitError.values 是成功未来的值的记录,对于出错的未来则是 nullParallelWaitError.errors 是具有相同形状的记录,对于成功的未来则有两个值为 null,对于出错的未来则包含一个 AsyncError,表示出错未来中的错误。

实现

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

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