typestar

await en un bucle, y otras trampas en JavaScript

forEach ignora async, y await dentro de un bucle serializa todo.

const double = async (n) => {
  await new Promise((resolve) => setTimeout(resolve, 1));
  return n * 2;
};

async function main() {
  const collected = [];
  [1, 2, 3].forEach(async (n) => collected.push(await double(n)));
  console.log("forEach saw:", collected.length); // 0: nothing awaited

  const sequential = [];
  for (const n of [1, 2, 3]) {
    sequential.push(await double(n));
  }
  console.log("for-of:", sequential);

  const parallel = await Promise.all([1, 2, 3].map(double));
  console.log("map + all:", parallel);
}

main();

Cómo funciona

  1. forEach no espera: la promesa del callback se descarta.
  2. for...of con await es secuencial, que quizá es lo que quieres.
  3. map más Promise.all es la versión paralela.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
21
Caracteres a escribir
516
Tokens
160
Ritmo de tres estrellas
100 tpm

Al ritmo de tres estrellas de 100 tokens por minuto, este intento toma unos 96 segundos.

Escribe este fragmento

Paso 4 de 4 en async y await; paso 9 de 19 en Promesas y async.

← Anterior Siguiente →