在 Javascript 数组映射中使用 promise 函数

新手上路,请多包涵

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

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

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

当然这是行不通的,输出数组是 [undefined, undefined]

解决此类问题的最佳方法是什么?我不介意使用其他库,如 async

原文由 Jorge 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 325
2 个回答

将您的数组映射到 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)
})

原文由 madox2 发布,翻译遵循 CC BY-SA 3.0 许可协议

您不会在 map 函数中返回您的承诺。

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

原文由 mdziekon 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏