在Javascript Array map中使用promise函数

时间:2016-09-12 13:57:40

标签: javascript arrays promise

有一个对象数组[obj1,obj2]

我想使用Map函数对所有这些进行数据库查询(使用promises),并将查询结果附加到每个对象。

[obj1, obj2].map(function(obj){
  db.query('obj1.id').then(function(results){
     obj1.rows = results
     return obj1
  })
})

当然这不起作用,输出数组是[undefined,undefined]

解决此类问题的最佳方法是什么?我不介意使用像async

这样的其他库

4 个答案:

答案 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);
  })
);