combineResolvable<T extends Object> function
Combines an iterable of Resolvables into one containing a list of their values.
The result is an Async if any of the resolvables
are Async
If any resolvable contains an Err, applies onErr
to combine errors.
Implementation
Resolvable<List<T>> combineResolvable<T extends Object>(
Iterable<Resolvable<T>> resolvables, {
@noFutures Err<List<T>> Function(List<Result<T>> allResults)? onErr,
}) {
if (resolvables.isEmpty) {
return Sync.okValue([]);
}
// If any resolvable is async, the result must be async.
if (resolvables.any((r) => r.isAsync())) {
final asyncs = resolvables.map((r) => r.toAsync());
return combineAsync(asyncs, onErr: onErr);
} else {
// All are sync, so we can proceed synchronously.
final syncs = resolvables.map((r) => r as Sync<T>);
return combineSync(syncs, onErr: onErr);
}
}