我想做的是:
使用map函数遍历对象数组
根据对象运行多个sql查询
用对象追加查询结果
我在循环提供,这是一个对象数组 free_item
以及 buy_item
它们与 offer
。我正在使用knexjs for postgresql数据库和nodejs
以下是实际代码:
offers = await Promise.all(offers.map(async offer => {
free_item_id = await db("offer_free_items").where({"offer_free_items.offer_id":offer.id}).select(["item_id"]).first()
console.log("-----------------debug line 1------------------")
buy_item_id = await db("offer_buy_items").where({"offer_buy_items.offer_id":offer.id}).select(["item_id"]).first()
console.log("-----------------debug line 2-------------------")
offer["free_item_id"] = get_item_id
offer["buy_item_id"] = buy_item_id
return offer
}))
问题是它没有按正确的顺序运行
调试行1
调试行1
调试行2
调试行2
正确的顺序如下:
调试行1
调试行2
调试行1
调试行2
1条答案
按热度按时间4ktjp1zp1#
使用
map()
遍历数组,对每个项执行提供的函数,并将结果存储在数组中。在传递异步函数时,map()
将对每个项并行运行函数,并返回一个挂起的承诺数组,然后将其 Package 在Promise.all
打电话等他们说完。如果您希望按顺序运行数组,那么
for...of
循环将执行以下操作: