Async<T extends Object> constructor
Async<T extends Object> (})
Creates an Async by executing an asynchronous function
mustAwaitAllFutures
.
IMPORTANT:
Always all futures witin mustAwaitAllFutures
to ensure errors are be
caught and propagated.
Implementation
factory Async(
@mustBeAnonymous
@mustAwaitAllFutures
Future<T> Function() mustAwaitAllFutures, {
@noFuturesAllowed Err<T> Function(Object? error)? onError,
@noFuturesAllowed void Function()? onFinalize,
}) {
assert(!_isSubtype<T, Future<Object>>(), '$T must never be a Future.');
return Async.unsafe(() async {
try {
return Ok<T>(await mustAwaitAllFutures());
} on Err catch (e) {
return e.transfErr<T>();
} catch (error) {
try {
if (onError == null) {
rethrow;
}
return onError(error);
} catch (error) {
return Err<T>(error);
}
} finally {
onFinalize?.call();
}
}());
}