jhamm
jhamm

Reputation: 25032

How to use `Array#map` within `Promise.all` in JavaScript

I am trying to create a Promise.all with an array of items. So if I create it like this it works fine

Promise.all([
  Query.getStuff(items[0]),
  Query.getStuff(items[1])
]).then(result => console.log(result))

If I try to create the Promise.all like this, it doesn't work

Promise.all([
    items.map(item => Query.getStuff(item))
]).then(result => console.log(result))

The then block is run before the Query.getStuff(item). What am I missing?

Upvotes: 22

Views: 24515

Answers (1)

gyre
gyre

Reputation: 16777

You should be writing

Promise.all(items.map(...))

instead of

Promise.all([ items.map(...) ])

Array#map returns an array, which means that the way you wrote your code originally, you were actually passing a multidimensional array to Promise.all — as in [ [promise1, promise2, ...] ] — instead of the expected one-dimensional version [promise1, promise2, ...].


Revised Code:

Promise.all(
    items.map(item => Query.getStuff(item))
).then(result => console.log(result))

Upvotes: 39

Related Questions