Using promise function inside Javascript Array map

JavascriptArraysPromise

Javascript Problem Overview


Having an array of objects [obj1, obj2]

I want to use Map function to make a DB query (that uses promises) about all of them and attach the results of the query to each object.

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

Of course this doesn't work and the output array is [undefined, undefined]

What's the best way of solving a problem like this? I don't mind using other libraries like async

Javascript Solutions


Solution 1 - Javascript

Map your array to promises and then you can use Promise.all() function:

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)
})

Solution 2 - Javascript

You are not returning your Promises inside the map function.

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

Solution 3 - Javascript

Example using async/await:

const mappedArray = await Promise.all(
  array.map(p => {
    return getPromise(p).then(i => i.Item);
  })
);

Solution 4 - Javascript

You can also do for await instead of map, and resolve your promises inside of it as well.

Solution 5 - Javascript

You can also use p-map library to handle promises in map function.

> Useful when you need to run promise-returning & async functions multiple times with different inputs concurrently.

> This is different from Promise.all() in that you can control the concurrency and also decide whether or not to stop iterating when there's an error.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJorgeView Question on Stackoverflow
Solution 1 - Javascriptmadox2View Answer on Stackoverflow
Solution 2 - JavascriptmdziekonView Answer on Stackoverflow
Solution 3 - Javascriptfede1608View Answer on Stackoverflow
Solution 4 - JavascriptPedro PaesView Answer on Stackoverflow
Solution 5 - JavascriptJakub KurdzielView Answer on Stackoverflow