使用返回值并行执行Promises

时间:2018-05-14 05:02:00

标签: javascript parallel-processing promise bluebird

我想为resellers数组中的每个成员并行调用queryDatabase函数,但似乎无法找到一种方法来执行此操作,因为每次调用都会返回'然后'部分...当我拿走await时,日志打印为空,因为承诺没有完成,但我相信await使它顺序

  // TODO: MAKE PARALLEL
  async function findOrgs(resellers) {
    var ao = [];
    for(const rese of resellers) {
      await queryDatabase(rese)
      .then((results) => {
          ao = ao.concat(results.map(re => re._id));
      })
    }
    console.log("done!", ao);
  }

是否可以使其并行?

1 个答案:

答案 0 :(得分:2)

改为使用Promise.all

async function findOrgs(resellers) {
  const idArrs = await Promise.all(resellers.map((rese) => (
    queryDatabase(rese)
      .then(results => results.map(({ _id }) => _id))
  )))
  const ao = [].concat(...idArrs);
  console.log("done!", ao);
}