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
- Un generador async produce promesas que el bucle espera por ti.
Symbol.asyncIteratores el protocolo detrás.- Salir con break llama al return del generador, así corre la limpieza.
Palabras clave y builtins usados aquí
Promiseasyncawaitbreakconstforfunctionifletofyield
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.
Paso 1 de 2 en Iterar de forma asíncrona; paso 10 de 19 en Promesas y async.