有一个对象数组[obj1,obj2]
我想使用Map函数对所有这些进行数据库查询(使用promises),并将查询结果附加到每个对象。
[obj1, obj2].map(function(obj){
db.query('obj1.id').then(function(results){
obj1.rows = results
return obj1
})
})
当然这不起作用,输出数组是[undefined,undefined]
解决此类问题的最佳方法是什么?我不介意使用像async
这样的其他库答案 0 :(得分:97)
将数组映射到promises,然后您可以使用Promise.all()函数:
var promises = [obj1, obj2].map(function(obj){
return db.query('obj1.id').then(function(results){
obj1.rows = results
return obj1
})
})
Promise.all(promises).then(function(results) {
console.log(results)
})
答案 1 :(得分:7)
你没有在map
函数中返回你的Promise。
[obj1, obj2].map(function(obj){
return db.query('obj1.id').then(function(results){
obj1.rows = results
return obj1
})
})
答案 2 :(得分:1)
您也可以执行for await
而不是map
,并在其中解决您的诺言。
答案 3 :(得分:0)
使用 async/await 的示例:
const mappedArray = await Promise.all(
array.map(p => {
return getPromise(p).then(i => i.Item);
})
);