Secuencial o paralelo en JavaScript
Dos await seguidos esperan dos veces; iniciar ambos primero, no.
const work = (name, ms) =>
new Promise((resolve) => setTimeout(() => resolve(name), ms));
async function sequential() {
const started = Date.now();
await work("a", 20);
await work("b", 20);
return Date.now() - started;
}
async function parallel() {
const started = Date.now();
const [first, second] = await Promise.all([work("a", 20), work("b", 20)]);
return [Date.now() - started, first, second];
}
async function main() {
console.log("sequential ms >= 40:", (await sequential()) >= 39);
const [elapsed] = await parallel();
console.log("parallel ms < 40:", elapsed < 39);
}
main();
Cómo funciona
await a(); await b();es secuencial, y a menudo un bug.- Inicia las promesas y luego espéralas juntas.
- La diferencia de tiempos es toda la gracia de Promise.all.
Palabras clave y builtins usados aquí
DatePromiseasyncawaitconstfunctionreturn
El intento, en números
- Líneas
- 23
- Caracteres a escribir
- 586
- Tokens
- 179
- Ritmo de tres estrellas
- 100 tpm
Al ritmo de tres estrellas de 100 tokens por minuto, este intento toma unos 107 segundos.
Paso 3 de 4 en async y await; paso 8 de 19 en Promesas y async.