使用Promise.all从函数

时间:2017-03-12 10:32:47

标签: javascript asynchronous promise

我正在尝试返回一个使用异步调用构建的数组,如下所示:

我想在调用myArr

的函数中使用foo()
 function foo(){

    let promiseArray = [];
    let singlePromise;
    let myArr = [];

    for(let node of Nodes){

      singlePromise = getSomePromise(node);
      singlePromise.then(function(result){
        myArr.push(bar(result));  
      });

      promiseArray.push(singlePromise);
    }

    // return Promise.all(promiseArray)? but then I lose myArr
  }

那我怎样才能返回myArr

2 个答案:

答案 0 :(得分:1)

而不是推送到myArr,推送解决所需值的承诺:

function foo() {
    const promiseArray = [];

    for (const node of Nodes) {
        const singlePromise =
            getSomePromise(node).then(function (result) {
                return bar(result);
            });

        promiseArray.push(singlePromise);
    }

    return Promise.all(promiseArray);
}

如果你正在使用像Bluebird这样的诺言库(强烈推荐),你甚至可以这样做:

const foo = () =>
    Promise.map(Nodes, node =>
        getSomePromise(node).then(bar)
    );

如果Nodes是一个数组:

const foo = () =>
    Promise.all(Nodes.map(getSomePromise)).map(bar);

答案 1 :(得分:0)

Promise.all将使用数组解析

return Promise.all(promiseArray)
  .then(arr){
   // arr is an array
}