是否可以将已解决的承诺分配给对象的属性?

时间:2015-02-12 19:18:44

标签: javascript object promise

我正在玩这里的承诺并尝试通过将每个承诺包装在IIFE中来分配一对已解析的承诺作为对象的属性。但是,解决的承诺永远不会被分配,尽管它们肯定会降低所请求的数据。

如果我可以让它工作,那将是很好的,因为它比成功/当时/错误/捕获块更简洁和富有表现力。是否有可能以这种方式使用承诺?

var obj = function() {   
    return new Promise(function(resolve, reject){
      return {
          primary: function() {
              return this.promisifiedHttpRequest(primaryQuery, options);
          }.call(this),
          secondary: function() {
              return this.promisifiedHttpRequest(secondaryQuery, options);
          }.call(this)
      }
  }.bind(this));
}

预期结果如下:

var obj = {
    primary: primaryQueryResponse,
    secondary: secondaryQueryResponse
};

1 个答案:

答案 0 :(得分:2)

正如JLRishe所说,用该代码解释确切的意图有点困难。我认为这就是你正在寻找的东西。这将返回一个带有数组结果的承诺。

return Promise.all([this.promisifiedHttpRequest(primaryQuery, options),
this.promisifiedHttpRequest(secondaryQuery, options)]);

或者,如果您喜欢" {primary:...,secondary:...}"对象,试试这个:

    return Promise.all([this.promisifiedHttpRequest(primaryQuery, options),
this.promisifiedHttpRequest(secondaryQuery, options)]).then(function(resultArr) {
  return {
    primary: resultArr[0],
    secondary: resultArr[1]
  }
});

我花了一段时间来学习这一点,也许它不是滥用的东西,但.then()的返回值对于转换"非常有用。对其他事物的承诺。