JavaScript es de un solo hilo (un carril). Tiene una Pila de Llamadas (Call Stack). El Bucle de Eventos (Event Loop) es el controlador de tráfico que decide qué entra en esa pila.
El Carril Prioritario (Microtasks)
No todas las tareas son iguales.
• MacroTasks (setTimeout, setInterval): Carril regular.
• MicroTasks (Promesas, QueueMicrotask): Carril VIP.
El Event Loop siempre vacía el carril VIP (Promesas) antes de procesar el siguiente auto regular (setTimeout).
El Quiz Definitivo
Predice el orden antes de ejecutar esto. Esta es una pregunta de entrevista muy común.
javascript
console.log("1. Inicio");
setTimeout(() => {
console.log("2. Timeout (Macro)");
}, 0);
Promise.resolve().then(() => {
console.log("3. Promesa (Micro)");
});
console.log("4. Fin");
/*
Lógica del Orden:
1. "Inicio" (Síncrono)
2. "Fin" (Síncrono)
3. "Promesa" (Cola Microtask - Mayor Prioridad)
4. "Timeout" (Cola Macrotask - Menor Prioridad)
*/