ES2025 · TypeScript 7.0
Ejercicios de JavaScript / TypeScript sobre Asincronía
4 ejercicios de Asincronía en JavaScript / TypeScript. Piensa la respuesta antes de abrirla: la explicación dice por qué las demás opciones fallan.
1 · Elige la respuesta · nivel 2
¿Qué imprime este código?
const results = await Promise.allSettled([ Promise.resolve(1), Promise.reject(new Error("fallo")),]);console.log(results.map((r) => r.status).join(","));- Afulfilled,rejected
- Bfulfilled
- CError: fallo
- Dresolved,rejected
Ver la respuesta
Respuesta: A. fulfilled,rejected
allSettled espera a todas las promesas y nunca rechaza: devuelve un objeto por promesa con status fulfilled o rejected. Promise.all, en cambio, rechazaría con el primer error.
2 · Elige la respuesta · nivel 2
¿En qué orden se imprimen las letras?
async function f() { console.log("B"); await null; console.log("D");}console.log("A");f();console.log("C");- AA B C D
- BA B D C
- CA C B D
- DB A C D
Ver la respuesta
Respuesta: A. A B C D
Una función async se ejecuta de forma síncrona hasta el primer await. Ahí cede el control, se imprime C y lo que queda de f continúa como microtarea.
3 · Encuentra el fallo · nivel 2
Imprime "Todo guardado" antes de que terminen los guardados. ¿Qué línea tiene el fallo?
1async function saveAll(items) {2 items.forEach(async (item) => {3 await save(item);4 });5 console.log("Todo guardado");6}Ver la respuesta
El fallo está en la línea 2:
items.forEach(async (item) => {forEach no espera a las promesas que devuelve el callback. Hay que usar for (const item of items) { await save(item); } o await Promise.all(items.map(save)).
4 · Completa el hueco · nivel 2
Completa para lanzar las dos peticiones a la vez y esperar a ambas.
const [user, posts] = ___ Promise.___([ Promise.resolve("ana"), Promise.resolve([1, 2]),]);console.log(user, posts.length);- await
- all
- async
- race
- then
- any
Ver la respuesta
Respuesta: await · all
const [user, posts] = await Promise.all([ Promise.resolve("ana"), Promise.resolve([1, 2]),]);console.log(user, posts.length);Promise.all espera a todas y devuelve sus resultados en el mismo orden, así que se pueden desestructurar. race y any devolverían solo el resultado de una.