wait property

Future<(T1, T2, T3)> get wait

Waits for futures in parallel.

Waits for all the futures in this record. Returns a record of the values, if all futures are successful.

The returned future is completed when all the futures have completed. If any of the futures do not complete, nor does the returned future.

If some futures complete with an error, the returned future completes with a ParallelWaitError. The ParallelWaitError.values is a record of the values of successful futures, and null for futures with errors. The ParallelWaitError.errors is a record of the same shape, with null values for the successful futures and an AsyncError with the error of futures which completed with an error.

Implementation

Future<(T1, T2, T3)> get wait {
  @pragma('vm:awaiter-link')
  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;
}