Параллельное выполнение обещаний с возвращаемыми значениями - PullRequest
0 голосов
/ 14 мая 2018

Я хочу вызывать функцию queryDatabase параллельно для каждого члена массива посредников, но, похоже, не могу найти способ сделать это, поскольку каждый вызов возвращает значение в разделе then, когда я убираю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 голосов
/ 14 мая 2018

Используйте 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);
}
...