Promise.all从.then()回调返回时不能正常工作

时间:2016-03-21 12:19:07

标签: javascript node.js promise

我正在使用Promise Node.js库,我想执行以下操作:

  1. 执行返回Promise的异步操作。
  2. 当该操作完成时,返回两个并行异步操作完成时完成的Promise。
  3. 我正在使用的代码如下:

    var Promise = require('promise');
    
    var resolved1 = Promise.resolve(1);
    
    var resolvedAll = resolved1.then(function() {
      return Promise.all(Promise.resolve(2), Promise.resolve(3));
    });
    
    var print = resolvedAll.then(function(values) {
      console.log(values);
    });
    
    print.done(function () {
      console.log('done');
    });
    

    但是这段代码没有按预期工作,因为它打印出来:

    []
    done
    

    从文档中,Promise.all返回一个promise,它在iterable参数中的所有promise都已解析时解析。所以理论上解决了所有不应该完成,直到传递给Promise.all的所有承诺都已完成,但这不是这里发生的事情。

    任何想法为什么Promise.all没有按预期工作?这可能是个错误吗?任何人都知道可以从.then()回调中返回多个承诺的替代方案吗?

    干杯, 盖尔德

1 个答案:

答案 0 :(得分:6)

Promise.all需要一个数组:

Promise.all([Promise.resolve(2), Promise.resolve(3)]);