combine3<T1 extends Object, T2 extends Object, T3 extends Object> static method

Sync<(T1, T2, T3)> combine3<T1 extends Object, T2 extends Object, T3 extends Object>(
  1. Sync<T1> s1,
  2. Sync<T2> s2,
  3. Sync<T3> s3, [
  4. @noFutures Err<(T1, T2, T3)> onErr(
    1. Result<T1>,
    2. Result<T2>,
    3. Result<T3>
    )?,
])
override

Combines 3 Sync outcomes into 1 containing a tuple of their values if all resolve to Ok.

If any resolve to Err, applies onErr function to combine errors.

See also: combineSync.

Implementation

static Sync<(T1, T2, T3)>
combine3<T1 extends Object, T2 extends Object, T3 extends Object>(
  Sync<T1> s1,
  Sync<T2> s2,
  Sync<T3> s3, [
  @noFutures
  Err<(T1, T2, T3)> Function(Result<T1>, Result<T2>, Result<T3>)? onErr,
]) {
  final combined = combineSync<Object>(
    [s1, s2, s3],
    onErr: onErr == null
        ? null
        : (l) => onErr(
            l[0].transf<T1>(),
            l[1].transf<T2>(),
            l[2].transf<T3>(),
          ).transfErr(),
  );
  return combined.map((l) => (l[0] as T1, l[1] as T2, l[2] as T3));
}