NodeJS Async/await在map函数中不工作

yuvru6vn  于 2023-05-22  发布在  Node.js
关注(0)|答案(1)|浏览(192)

我在一个数组上循环,并根据值通过sequelize从postgres获取数据,然后将该数据推送到investment数组。
然而,数据并没有有序地插入到数组中,在使用控制台日志后,我发现sqlQuery需要一些时间来获取数据,但循环在此之前结束,或者我认为它正在发生。

await Promise.all(array1.map(async (value) => {
        const sqlQuery = `sql query goes here`;
        console.log("test")

        const data = await sequelize.query(sqlQuery);
        const sqlData= data[0][0]

        investment.push(sqlData.amount);
        console.log("investment",investment);
    }));

“array1”的长度是4,当我运行这段代码时,我收到的输出是

test
test
test
test
investment 2000
investment 4000
investment 1500
investment 2200

理想情况下应该是

investment 1500
investment 2000
investment 2200
investment 4000

我做错了什么,有人能帮帮我吗?

llmtgqce

llmtgqce1#

SQL查询是异步执行的,因此它们可以以任何顺序完成,这就是investment.push()调用发生的顺序。
您需要从回调函数返回值,然后Promise.all()将以与promise数组相同的顺序将它们作为数组返回。然后可以将其分配给investment

let investment =
  await Promise.all(array1.map(async(value) => {
    const sqlQuery = `sql query goes here`;
    console.log("test")

    const data = await sequelize.query(sqlQuery);
    const sqlData = data[0][0]

    return sqlData.amount;
  }));

相关问题