export function doubleValueCallbackToPromise()

in src/common-core/promise_utils.ts [199:231]


export function doubleValueCallbackToPromise<TResult1, TResult2, TPromiseResult>(
  callBackOperation: (callback: DoubleValueCallback<TResult1, TResult2>) => void,
  packResults: (result1: TResult1, result2: TResult2) => TPromiseResult): Promise<TPromiseResult>;
export function doubleValueCallbackToPromise<TResult1, TResult2, TPromiseResult>(
  callBackOperation: (callback: DoubleValueCallback<TResult1, TResult2>) => void,
  packResults: (result1: TResult1, result2: TResult2) => TPromiseResult,
  userCallback?: DoubleValueCallback<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((result1, result2) => {
        if (result1 instanceof Error) {
          reject(result1);
        }

        if (result2 instanceof Error) {
          reject(result2);
        }

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