Closure con Async Race Condicional
Dificultad: Difícil JavaScript advanced coding
const secreto = (()=> {
letval = 0;
return async (p) =>
await Promise.race([p, new Promise(r => setTimeout(() => r(++val), 10))]);
})();
const r = await Promise.all([secreto(Promise.resolve(100)), secreto(Promise.resolve(200)), secreto(Promise.resolve(300))]);
console.log(r); 📥 Inputs:
Promises: 100, 200, 300
❓ ¿Cuál es el output?
Ingresa tu respuesta abajo
💡 Explicación
El código crea un closure con estado mutable (val). Aunque setTimeout incrementa val, las Promises con resolve inmediato siempre ganan el race porque el microtask de Promise.resolve se ejecuta ANTES que el timer del macrotask. Promise.race retorna la promesa que se resuelve primero. Las 3 llamadas retornan sus valores originales porque los resolves instantáneos son más rápidos que el setTimeout de 10ms.
¿Qué imprime r? 🧩