Resolvable<T extends Object> constructor

Resolvable<T extends Object>(
  1. @mustBeAnonymous @mustAwaitAllFutures FutureOr<T> mustAwaitAllFutures(), {
  2. @noFutures TOnErrorCallback<T>? onError,
  3. @noFutures TVoidCallback? 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, {
  @noFutures TOnErrorCallback<T>? onError,
  @noFutures TVoidCallback? onFinalize,
}) {
  final result = mustAwaitAllFutures();
  if (result is Future<T>) {
    return Async(() => result, onError: onError, onFinalize: onFinalize);
  } else {
    return Sync(() => result, onError: onError, onFinalize: onFinalize);
  }
}