Los cuatro combinadores en JavaScript
all, allSettled, race y any difieren en qué cuenta como terminado.
const quick = (value, ms) =>
new Promise((resolve) => setTimeout(() => resolve(value), ms));
const failing = (ms) =>
new Promise((_, reject) => setTimeout(() => reject(new Error("boom")), ms));
async function main() {
console.log(await Promise.all([quick("a", 5), quick("b", 1)]));
const settled = await Promise.allSettled([quick("ok", 1), failing(2)]);
console.log(settled.map((r) => r.status));
console.log(await Promise.race([quick("fast", 1), quick("slow", 20)]));
console.log(await Promise.any([failing(1), quick("survivor", 5)]));
try {
await Promise.all([quick("a", 1), failing(2)]);
} catch (error) {
console.log("all rejected:", error.message);
}
}
main();
Cómo funciona
allse rechaza con la primera falla;allSettlednunca se rechaza.racese establece con la primera que se establezca, con éxito o sin él.anyespera el primer éxito y se rechaza solo si todas fallan.
Palabras clave y builtins usados aquí
Promiseasyncawaitcatchconstfunctiontry
El intento, en números
- Líneas
- 22
- Caracteres a escribir
- 670
- Tokens
- 235
- Ritmo de tres estrellas
- 95 tpm
Al ritmo de tres estrellas de 95 tokens por minuto, este intento toma unos 148 segundos.
Paso 5 de 5 en Promesas; paso 5 de 19 en Promesas y async.