如何推动返回值到数组与多个异步等待在foreach循环调用

问题描述 投票:2回答:3

我想使多个异步等待在foreach循环函数调用和按值返回到一个数组。但它返回一个承诺。我怎么可以存储在阵列中的实际返回的值?谢谢您的帮助。

let table1Assignments = [];
        await groupingTable1Id.forEach(table1Id => {(
             table1Assignments.push(assignmentsDAO.getAssignmentsOfTable(table1Id, date, time)))
        });

getAssignmentsOfTable看起来是这样的:

 async getAssignmentsOfTable(tableId, date = null) {
   let stmt =
      `SELECT * 
       FROM assignment a
       WHERE a.dining_table_id = $1` + (date?' AND a.date = $2':'');
    const params = date?[tableId, date]:[tableId];

    const result = await this.db.query(stmt, params);

    return result.rows.map(row => {
        return new Assignment(
          row.id,
          row.dining_table_id,
          row.guest_group_id,
          row.date,
          row.time
        );
    });
}
node.js
3个回答
2
投票

我会按照这种模式:

Promise.all([
  groupingTable1Id.map(table1Id => assignmentsDAO.getAssignmentsOfTable(table1Id, date, time))
]).then((table1Assignments) => {
  table1Assignments.forEach(assignment) { process(assignment) });
});

请参阅有关JavaScript(ES6)文档Promise.all here ...


0
投票

您可以在一个大的承诺使用Promise.all将你的承诺。它看起来像这样

const promises = Promise.all(
  // map your IDs to assignment promises
  groupingTable1Id.map(table1Id => assignmentsDAO
    .getAssignmentsOfTable(table1Id, date, time))
);

promises.then(table1Assignments => {
  // Do stuff with assignments
  table1Assignments.forEach(console.log);
});

0
投票

相反forEach的,你可以使用for of循环,如下所示:

let table1Assignments = [];
for (const table1Id of groupingTable1Id) {
  table1Assignments.push(await assignmentsDAO.getAssignmentsOfTable(...));
}

编辑:这是不是因为顺序执行相比Promise.all的性能方面最快的解决方法,但我觉得它更清晰。

© www.soinside.com 2019 - 2024. All rights reserved.