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)> 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;
}