function NewPromiseCapability(C) {
  if (C === GlobalPromise) {
    // Optimized case, avoid extra closure.
    var promise = PromiseInit(new GlobalPromise(promiseRawSymbol));
    var callbacks = CreateResolvingFunctions(promise);
    return {
      promise: promise,
      resolve: callbacks.resolve,
      reject: callbacks.reject
    };
  }

  var result = {promise: UNDEFINED, resolve: UNDEFINED, reject: UNDEFINED };
  result.promise = new C((resolve, reject) => {
    if (!IS_UNDEFINED(result.resolve) || !IS_UNDEFINED(result.reject))
        throw MakeTypeError(kPromiseExecutorAlreadyInvoked);
    result.resolve = resolve;
    result.reject = reject;
  });

  if (!IS_CALLABLE(result.resolve) || !IS_CALLABLE(result.reject))
      throw MakeTypeError(kPromiseNonCallable);

  return result;
}
function NewPromiseCapability(C) {
  if (C === GlobalPromise) {
    
    var promise = PromiseInit(new GlobalPromise(promiseRawSymbol));
    var callbacks = CreateResolvingFunctions(promise);
    return {
      promise: promise,
      resolve: callbacks.resolve,
      reject: callbacks.reject
    };
  }

  var result = {promise: UNDEFINED, resolve: UNDEFINED, reject: UNDEFINED };
  result.promise = new C((resolve, reject) => {
    if (!IS_UNDEFINED(result.resolve) || !IS_UNDEFINED(result.reject))
        throw MakeTypeError(kPromiseExecutorAlreadyInvoked);
    result.resolve = resolve;
    result.reject = reject;
  });

  if (!IS_CALLABLE(result.resolve) || !IS_CALLABLE(result.reject))
      throw MakeTypeError(kPromiseNonCallable);

  return result;
}
function NewPromiseCapability ( C ) { if ( C === GlobalPromise ) { // Optimized case, avoid extra closure. var promise = PromiseInit ( new GlobalPromise ( promiseRawSymbol ) ) ; var callbacks = CreateResolvingFunctions ( promise ) ; return { promise : promise , resolve : callbacks . resolve , reject : callbacks . reject } ; } var result = { promise : UNDEFINED , resolve : UNDEFINED , reject : UNDEFINED } ; result . promise = new C ( ( resolve , reject ) => { if ( ! IS_UNDEFINED ( result . resolve ) || ! IS_UNDEFINED ( result . reject ) ) throw MakeTypeError ( kPromiseExecutorAlreadyInvoked ) ; result . resolve = resolve ; result . reject = reject ; } ) ; if ( ! IS_CALLABLE ( result . resolve ) || ! IS_CALLABLE ( result . reject ) ) throw MakeTypeError ( kPromiseNonCallable ) ; return result ; }
ES#sec-newpromisecapability NewPromiseCapability ( C )
ES#sec - newpromisecapability NewPromiseCapability ( C )