在这种情况下如何保持类似承诺的 API ?

How to maintain a promise-like API in this case?

function foo(options) {
  if(!isValid(options)) {
    // I want to return a resolved promise here to permit client code to continue without a failure
  }

  return promisifiedThirdPartyApi(options); // Does not handle an invalid options object successfully
}

在 "invalid" 案例中,我如何惯用地 return 已解决的承诺?

function foo(options) {
  return new Promise(function(accept, reject) {
     if(!isValid(options)) {
         reject();
      }

     promisifiedThirdPartyApi(options).then(function() {
        accept();
     });
   });
}

请注意,Q 可能有一些快捷方式...

原生承诺

看看原生 Promise 对象的静态方法 resolve and reject

function foo(options) {
  if(!isValid(options)) {
    return Promise.resolve();
  }

  return promisifiedThirdPartyApi(options);
}

Angular$q

使用 $q.when 来 return 来自某个非 Promise 对象的已解决 Promise:

function foo(options) {
  if(!isValid(options)) {
    return $q.when([]);
  }

  return promisifiedThirdPartyApi(options);
}

Q 承诺

使用 Q.resolve(),其中 return 是已解决的承诺。

function foo(options) {
  if(!isValid(options)) {
    return Q.resolve();
  }

  return promisifiedThirdPartyApi(options);
}