Использование функции обещания внутри карты массива Javascript

Имея массив объектов [obj1, obj2]

Я хочу использовать функцию Map, чтобы сделать запрос БД (который использует обещания) обо всех них и приложить результаты запроса к каждому объекту.

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

Конечно, это не работает, и выходной массив [undefined, undefined]

Какой лучший способ решения такой проблемы? Я не возражаю против использования других библиотек, таких как async

Ответы

Ответ 1

Сопоставьте свой массив с обещаниями, а затем вы можете использовать функцию 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)
})

Ответ 2

Вы не возвращаете свои обещания внутри функции map.

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