tryCallThen<R2> method

FutureOr<R2> tryCallThen<R2>(
  1. A a,
  2. B b,
  3. FutureOr<R2> onValue(
    1. R value
    ), {
  4. FutureOr<R> then(
    1. R value
    )?,
  5. TryCallOnError<R2>? onError,
})

Implementation

FutureOr<R2> tryCallThen<R2>(A a, B b, FutureOr<R2> Function(R value) onValue,
    {FutureOr<R> Function(R value)? then, TryCallOnError<R2>? onError}) {
  var f = this;

  if (onError != null) {
    try {
      var r = f(a, b);
      if (r is Future<R>) {
        return r.then(onValue, onError: onError);
      } else {
        try {
          var r2 = onValue(r);
          if (r2 is Future<R2>) {
            return r2.onError(onError);
          } else {
            return r2;
          }
        } catch (e, s) {
          return onError(e, s);
        }
      }
    } catch (e, s) {
      return onError(e, s);
    }
  } else {
    var r = f(a, b);
    if (r is Future<R>) {
      return r.then(onValue, onError: onError);
    } else {
      return onValue(r);
    }
  }
}