【问题标题】:Return new promise Q in ternary condition在三元条件下返回新的 Promise Q
【发布时间】:2016-08-03 03:29:09
【问题描述】:

我正在使用以下代码,它工作正常。

现在我需要返回 promise resolve 但不知道在这种情况下该怎么做,有什么好方法吗? 请忽略代码同步我们正在开发一个工具,每个外部 API 方法都应该返回承诺

这是代码

getExtendedFileContent: function(sHTML, aConfig) {
    var oDeferred = Q.defer();
    return aConfig ? this._process(sHTML, aConfig) : sHTML;
},

this._process(sHTML, aConfig)sHTML 应该返回

oDeferred.promise;

【问题讨论】:

  • 什么是sHTML 字符串? this._process(sHTML, aConfig) 返回什么?
  • q.resolve(value) 返回一个已解决的承诺。
  • 您的 getExtendedFileContent 应该只返回承诺 (oDeferred.promise)。然后,您应该使用 sHTMLthis._process(sHTML, aConfig) 返回的值来解决此承诺
  • @Satpal - sHTML 是字符串,并且处理函数返回字符串...

标签: javascript jquery promise q


【解决方案1】:

不要使用Q.defer。只需使用Q function(或Promise.resolve,如果您使用的是与ES6 兼容的promise 库):

function getExtendedFileContent(sHTML, aConfig) {
    return Q(aConfig ? this._process(sHTML, aConfig) : sHTML);
}

【讨论】:

  • 感谢您解释为什么反对 q.defer,因为我看到很多地方都在使用它...
  • @NinaS:为了避免deferred antipattern,主要是:-) 这只是没有必要,增加了复杂性并引入了错误的可能性。此外,您应该使用Q.Promise instead of Q.defer anyway(当您真正需要它时,鉴于 Q 的出色承诺助手,这种情况非常罕见)。另见here
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-21
  • 2012-01-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多