wait 属性
并行等待多个 Future。
等待迭代器中的所有 Future。如果所有 Future 都成功完成,则返回一个值的列表,顺序与创建它们的 Future 相同。
类似于 Future.wait,但使用 ParallelWaitError 报告错误,允许调用者处理错误并在必要时丢弃成功的结果。
返回的 Future 完成时,所有 Future 都已完成。如果其中任何一个 Future 没有完成,返回的 Future 也不会完成。
如果任何一个 Future 异常完成,返回的 Future 将以 ParallelWaitError 完成。The ParallelWaitError.values 是成功 Future 的值列表和一个 null
的列表,用于有错误的 Future。The ParallelWaitError.errors 是长度相同的列表,对于成功 Future 为 null
值,对于有错误完成 Future 为 具错 的 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;
}