Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否可以将已解决的承诺分配给对象的属性?_Javascript_Object_Promise - Fatal编程技术网

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

Javascript 是否可以将已解决的承诺分配给对象的属性?,javascript,object,promise,Javascript,Object,Promise,我在这里玩弄承诺,试图通过将每个承诺包装在一个生命中,来分配一对已解析的承诺作为对象的属性。但是,解决的承诺永远不会被分配,尽管它们肯定会拉低请求的数据 如果我能让它工作,那就太好了,因为它比success/then/error/catch块更简洁、更富表现力。有可能这样使用承诺吗 var obj = function() { return new Promise(function(resolve, reject){ return { primary

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

如果我能让它工作,那就太好了,因为它比success/then/error/catch块更简洁、更富表现力。有可能这样使用承诺吗

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
};

正如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()
的返回值对于将承诺“转换”为其他东西非常有用。

通过从传递给承诺构造函数的函数返回对象(返回值将被忽略),您想要实现什么,以及调用承诺构造函数而不使用
resolve
reject
参数(生成的承诺将永远不会解析)。你能详细解释一下你认为这段代码在做什么吗?这对我来说只是让我的大脑受伤。我觉得它不是很有表现力。我有点喜欢JLRishe,但你确实声称它正在提取请求的数据。因此,如果您想在示例中最内部的函数中设置断点,我很想知道该点的堆栈跟踪是什么。@Katana314对
promisifiedHttpRequest()
的两个调用肯定会发生。简单地说,他们做出的承诺被放在一个物体上,然后被扔进深渊,再也看不见了。堆栈跟踪很简单:[外部函数]->[IIFE]->[承诺构造函数]->[匿名函数]->[内部IIFE]->[promisifiedHttpRequest]啊!是的,我花了太长时间才注意到
.call(this)
部分。有些东西告诉我他想要的是Promise.all(不记得这是否是原生Promise API的一部分)感谢您的反馈。我是一个新的承诺,并试图解决它在我的脑海中,所以请容忍我。我在问题中添加了一些上下文,以澄清预期结果。我知道。all方法,但我想知道是否可以不使用它。