export function tripleValueCallbackToPromise()

in common/core/src/promise_utils.ts [263:295]


export function tripleValueCallbackToPromise<TResult1, TResult2, TPromiseResult>(
  callbackOperation: (callback: TripleValueCallback<TResult1, TResult2>) => void,
  packResults: (result1: TResult1, result2: TResult2) => TPromiseResult,
  userCallback: TripleValueCallback<TResult1, TResult2>): void;
export function tripleValueCallbackToPromise<TResult1, TResult2, TPromiseResult>(
  callbackOperation: (callback: TripleValueCallback<TResult1, TResult2>) => void,
  packResults: (result1: TResult1, result2: TResult2) => TPromiseResult, ): Promise<TPromiseResult>;
export function tripleValueCallbackToPromise<TResult1, TResult2, TPromiseResult>(
  callbackOperation: (callback: TripleValueCallback<TResult1, TResult2>) => void,
  packResults: (result1: TResult1, result2: TResult2) => TPromiseResult,
  userCallback?: TripleValueCallback<TResult1, TResult2>): Promise<TPromiseResult> | void {
  if (userCallback) {
    if (!(typeof userCallback === 'function')) {
      throw new TypeError('Callback has to be a Function');
    }

    return callbackOperation(userCallback);
  }

  return new Promise<TPromiseResult>((resolve, reject) => {
    try {
      callbackOperation((error, result1, result2) => {
        if (error) {
          reject(error);
        }

        resolve(packResults(result1, result2));
      });
    } catch (error) {
      reject(error);
    }
  });
}