Reputation: 25032
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
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, ...]
.
Promise.all(
items.map(item => Query.getStuff(item))
).then(result => console.log(result))
Upvotes: 39