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)
})
}
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
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}`) }
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.