Async/await sigue rompiéndome la cabeza con los bucles

por Marta Moreno Alvarez··41 votos

A ver si alguien me explica esto de una maldita vez.

Tengo un array y quiero hacer una llamada a la API por cada elemento. Con forEach no funciona (ya lo se), con for...of funciona pero es lento porque va en serie. Con Promise.all va en paralelo pero si el array tiene 500 elementos explota el servidor.

La solucion que he encontrado es hacer chunks de 10 y Promise.all por chunk. ¿Es esto lo que hace todo el mundo o hay algo mejor?

const chunks = []
for (let i = 0; i < ids.length; i += 10) {
  chunks.push(ids.slice(i, i + 10))
}
for (const chunk of chunks) {
  await Promise.all(chunk.map(id => fetchItem(id)))
}