我在一个数组上循环,并根据值通过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
我做错了什么,有人能帮帮我吗?
1条答案
按热度按时间llmtgqce1#
SQL查询是异步执行的,因此它们可以以任何顺序完成,这就是
investment.push()
调用发生的顺序。您需要从回调函数返回值,然后
Promise.all()
将以与promise数组相同的顺序将它们作为数组返回。然后可以将其分配给investment
。