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<(T1, T2, T3, T4, T5, T6, T7, T8, T9)> get wait {
final c = Completer<(T1, T2, T3, T4, T5, T6, T7, T8, T9)>.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);
final v6 = _FutureResult<T6>($6);
final v7 = _FutureResult<T7>($7);
final v8 = _FutureResult<T8>($8);
final v9 = _FutureResult<T9>($9);
_FutureResult._waitAll([v1, v2, v3, v4, v5, v6, v7, v8, v9], (int errors) {
if (errors == 0) {
c.complete((
v1.value,
v2.value,
v3.value,
v4.value,
v5.value,
v6.value,
v7.value,
v8.value,
v9.value
));
} else {
c.completeError(ParallelWaitError(
(
v1.valueOrNull,
v2.valueOrNull,
v3.valueOrNull,
v4.valueOrNull,
v5.valueOrNull,
v6.valueOrNull,
v7.valueOrNull,
v8.valueOrNull,
v9.valueOrNull
),
(
v1.errorOrNull,
v2.errorOrNull,
v3.errorOrNull,
v4.errorOrNull,
v5.errorOrNull,
v6.errorOrNull,
v7.errorOrNull,
v8.errorOrNull,
v9.errorOrNull
),
errorCount: errors,
defaultError: v1.errorOrNull ??
v2.errorOrNull ??
v3.errorOrNull ??
v4.errorOrNull ??
v5.errorOrNull ??
v6.errorOrNull ??
v7.errorOrNull ??
v8.errorOrNull ??
v9.errorOrNull
));
}
});
return c.future;
}