wait 属性
并行等待 futures。
等待这个可迭代中的所有 futures。如果所有 futures 都成功,则返回一个包含结果的值的列表,其顺序与创建它们的 futures 相同。
类似于 Future.wait,但使用 ParallelWaitError 报告错误,允许调用者处理错误并在必要时销毁成功的结果。
返回的 future 在所有 futures 完成时完成。如果有任何 futures 未完成,则返回的 future 也不会完成。
如果有任何 future 以错误完成,则返回的 future 以 ParallelWaitError 完成。The ParallelWaitError.values 是成功 futures 的值的列表,对于出错 futures 是 null
。The ParallelWaitError.errors 是长度相同的列表,对于成功 futures 有 null
值,对于出错 futures 有包含错误的 AsyncError。
实现
Future<List<T>> get wait {
var results = [for (var f in this) _FutureResult<T>(f)];
if (results.isEmpty) return Future<List<T>>.value(<T>[]);
final c = Completer<List<T>>.sync();
_FutureResult._waitAll(results, (errors) {
if (errors == 0) {
c.complete([for (var r in results) r.value]);
} else {
var errorList = [for (var r in results) r.errorOrNull];
c.completeError(ParallelWaitError<List<T?>, List<AsyncError?>>(
[for (var r in results) r.valueOrNull], errorList,
errorCount: errors, defaultError: errorList.firstWhere(_notNull)));
}
});
return c.future;
}