I've been trying to figure out. How I can push a result to an array from a promise loop. Can anyone point me in the right location?
const ids = [1, 2, 3]
let results = []
for (let id of ids) {
getLight(id)
.then(light => {
results.push(light)
})
.catch(err => {
console.log(err)
})
}
const ids = [1, 2, 3]
let results = []
Promise.all(
ids.map((id) =>
getLight(id)
.then(light => {
results.push(light)
})
.catch(err => {
console.log(err)
})
)).then(() => console.log(results))
function getLight(id) {
return new Promise((res) => {
setTimeout(res, 1000)
}).then(() => `light for id: ${id}`)
}
with async/await
(async() => {
const ids = [1, 2, 3]
let results = await Promise.all(
ids.map((id) =>
getLight(id))
)
console.log(results);
})()
function getLight(id) {
return new Promise((res) => {
setTimeout(res, 1000)
}).then(() => `light for id: ${id}`)
}
Promises are asynchronous, so you can't do that. You can use Promise.all
though to compose the promises together and then wait on the result:
const ids = [1, 2, 3]
Promise.all(ids.map(id => getLight(id))).then(results => {
// do something with results here
})
Breaking this down:
ids.map(id => getLight(id))
converts the ids to an array of unresolved promises.
Promise.all(promises).then(results => { ... })
resolves all the promises and passes the results (in the correct order) to the callback
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With