Resolvable<T extends Object> constructor

Resolvable<T extends Object>(
  1. @mustBeAnonymous @mustAwaitAllFutures FutureOr<T> mustAwaitAllFutures(), {
  2. @noFuturesAllowed Err<T> onError(
    1. Object? error
    )?,
  3. @noFuturesAllowed void onFinalize()?,
})

Creates a Sync or Async depending on the return type of mustAwaitAllFutures.

IMPORTANT:

Always all futures witin mustAwaitAllFutures to ensure errors are be caught and propagated.

Implementation

factory Resolvable(
  @mustBeAnonymous
  @mustAwaitAllFutures
  FutureOr<T> Function() mustAwaitAllFutures, {
  @noFuturesAllowed Err<T> Function(Object? error)? onError,
  @noFuturesAllowed void Function()? onFinalize,
}) {
  final result = mustAwaitAllFutures();
  if (result is Future<T>) {
    return Async(() => result, onError: onError, onFinalize: onFinalize);
  } else {
    return Sync(() => result, onError: onError, onFinalize: onFinalize);
  }
}