在 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 许可协议

阅读 319
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 翻译
子站问答
访问
宣传栏