typestar

for await en JavaScript

Consumir un iterable asíncrono, un valor esperado a la vez.

async function* pages(total) {
  for (let page = 1; page <= total; page += 1) {
    await new Promise((resolve) => setTimeout(resolve, 1));
    yield { page, rows: page * 2 };
  }
}

async function main() {
  let rows = 0;
  for await (const page of pages(3)) {
    rows += page.rows;
  }
  console.log("rows:", rows);

  for await (const page of pages(5)) {
    if (page.page === 2) break;
    console.log("saw page", page.page);
  }

  const all = [];
  for await (const value of [Promise.resolve(1), Promise.resolve(2)]) {
    all.push(value);
  }
  console.log(all);
}

main();

Cómo funciona

  1. Un generador async produce promesas que el bucle espera por ti.
  2. Symbol.asyncIterator es el protocolo detrás.
  3. Salir con break llama al return del generador, así corre la limpieza.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
27
Caracteres a escribir
533
Tokens
175
Ritmo de tres estrellas
105 tpm

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

Escribe este fragmento

Paso 1 de 2 en Iterar de forma asíncrona; paso 10 de 19 en Promesas y async.

← Anterior Siguiente →