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