Async<T extends Object> constructor
Async<T extends Object> (
- @mustBeAnonymous @mustAwaitAllFutures Future<
T> mustAwaitAllFutures(), { - @noFutures TOnErrorCallback<
T> ? onError, - @noFutures TVoidCallback? onFinalize,
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, {
@noFutures TOnErrorCallback<T>? onError,
@noFutures TVoidCallback? onFinalize,
}) {
assert(!isSubtype<T, Future<Object>>(), '$T must never be a Future.');
return Async.result(() async {
try {
return Ok<T>(await mustAwaitAllFutures());
} on Err catch (err) {
return err.transfErr<T>();
} catch (error, stackTrace) {
try {
if (onError == null) {
rethrow;
}
return onError(error, stackTrace);
} catch (error, stackTrace) {
return Err<T>(error, stackTrace: stackTrace);
}
} finally {
onFinalize?.call();
}
}());
}