addSafe method

Resolvable<Option<T>> addSafe(
  1. @noFuturesAllowed Resolvable<Option<T>>? handler(
    1. Result<Option<T>> previous
    ), {
  2. Duration? buffer,
  3. _TOnPrevErr<T>? onPrevErr,
  4. bool? eagerError,
})

Adds a handler to the queue that processes the previous value.

The buffer duration can be used to throttle the execution.

Implementation

Resolvable<Option<T>> addSafe(
  @noFuturesAllowed
  Resolvable<Option<T>>? Function(Result<Option<T>> previous) handler, {
  Duration? buffer,
  _TOnPrevErr<T>? onPrevErr,
  bool? eagerError,
}) {
  final buffer1 = buffer ?? _buffer;
  if (buffer1 == null) {
    return _enqueue(handler, onPrevErr, eagerError);
  } else {
    return _enqueue(
      (previous) {
        return Resolvable(() async {
          final a = await Future.wait<dynamic>([
            // TODO: false positive linter!
            // ignore: must_await_all_futures
            Future<Resolvable<Option<T>>?>.value(handler(previous)),
            // TODO: false positive linter!
            // ignore: must_await_all_futures
            Future<void>.delayed(buffer1),
          ]);
          return (a.first as Resolvable<Option<T>>?) ??
              Resolvable(() => None<T>());
        }).flatten();
      },
      onPrevErr,
      eagerError,
    );
  }
}