【问题标题】:How to maintain a promise-like API in this case?在这种情况下如何维护类似 Promise 的 API?
【发布时间】:2015-09-11 10:53:18
【问题描述】:
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
}

如何在“无效”的情况下以惯用方式返回已解决的承诺?

【问题讨论】:

标签: javascript promise q


【解决方案1】:

原生承诺

看看原生 Promise 对象的静态方法 resolvereject

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

  return promisifiedThirdPartyApi(options);
}

角度 $q

使用 $q.when 从某个非 Promise 对象返回已解决的 Promise:

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

  return promisifiedThirdPartyApi(options);
}

Q 承诺

使用Q.resolve(),它返回一个已解决的承诺。

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

  return promisifiedThirdPartyApi(options);
}

【讨论】:

  • 不,即使使用 Q,您也可以只使用 return Q.resolve()。无需创建延迟。
【解决方案2】:
function foo(options) {
  return new Promise(function(accept, reject) {
     if(!isValid(options)) {
         reject();
      }

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

请注意,Q 可能为此提供了一些快捷方式...

【讨论】:

猜你喜欢
  • 2016-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-13
  • 2021-06-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多