Fundamentos de asincronía: event loop, call stack y colas

Entiende por qué el código asíncrono se ejecuta en cierto orden y evita bugs de sincronización.

JavaScript ejecuta una sola pila principal, pero coordina tareas asíncronas con colas.

Entender event loop evita errores de orden en UI, fetch y timers.

Microtareas (promesas) y macrotareas (setTimeout) no se procesan igual.

El orden real de ejecución es más importante que la apariencia lineal del código.

  • Stack ejecuta, colas esperan, loop coordina.
  • Call stack: funciones que se ejecutan ahora.
  • Task queue: callbacks de timers/eventos.
  • Microtask queue: promesas y `queueMicrotask`.
  • Event loop: decide qué entra al stack y cuándo.

Arquitectura mental mínima

Stack ejecuta, colas esperan, loop coordina.

  • Call stack: funciones que se ejecutan ahora.
  • Task queue: callbacks de timers/eventos.
  • Microtask queue: promesas y `queueMicrotask`.
  • Event loop: decide qué entra al stack y cuándo.

Errores comunes por mal modelo mental

El bug típico: asumir orden síncrono donde no existe.

Un `setTimeout(..., 0)` no significa inmediato: solo se encola y espera turno.

Las promesas resueltas van a microtask queue y se ejecutan antes que la siguiente macrotarea.

Patrón práctico para flujos asíncronos

Separa inicio, trabajo asíncrono y cierre.

JavaScript
34

Fundamentos de asincronía: event loop, call stack y colas

Entiende por qué el código asíncrono se ejecuta en cierto orden y evita bugs de sincronización.

Código del tema: call stack | task queue | microtask queue | event loop

📘 Teoría

Arquitectura mental mínima

Stack ejecuta, colas esperan, loop coordina.

  • Call stack: funciones que se ejecutan ahora.
  • Task queue: callbacks de timers/eventos.
  • Microtask queue: promesas y `queueMicrotask`.
  • Event loop: decide qué entra al stack y cuándo.
Orden básico de ejecución
console.log('A');

setTimeout(() => console.log('B timeout'), 0);
Promise.resolve().then(() => console.log('C promise'));

console.log('D');
// Salida: A, D, C promise, B timeout

Errores comunes por mal modelo mental

El bug típico: asumir orden síncrono donde no existe.

1

Un `setTimeout(..., 0)` no significa inmediato: solo se encola y espera turno.

2

Las promesas resueltas van a microtask queue y se ejecutan antes que la siguiente macrotarea.

Patrón práctico para flujos asíncronos

Separa inicio, trabajo asíncrono y cierre.

Secuencia explícita
console.log('[1] inicio');

fetch('/api/data')
  .then((res) => res.json())
  .then((data) => {
    console.log('[2] datos listos', data);
  })
  .catch((err) => {
    console.error('[3] error', err.message);
  })
  .finally(() => {
    console.log('[4] fin del flujo');
  });

🧭 Visuales clave

Asincronía y event loop

Aclara el orden real de ejecución entre código síncrono y asíncrono.

Esquema de call stack, cola de tareas y event loop

🧪 Aprende probando

Ejemplo Ejemplo guiado: predice el orden Identifica qué se ejecuta primero entre sync, promise y timeout.

🏁 Retos

Reto Reto: añade microtarea explícita Usa `queueMicrotask` para reforzar el orden de colas.

🧰 Recursos

Test

Comprueba tus conocimientos con un test sobre JavaScript.

Test de JavaScript
CodePen: fetch y APIs
Abrir en CodePen

¿Qué es esto?

Soy Cristian Eslava y a veces hago webs para procrastinar yo y vosotros 😉.

Esta la hice en febrero de 2026 para facilitar el aprendizaje de mis alumnxs. Aprender desarrollo web practicando. La idea es que crezca semanalmente con nuevos temas, tests y retos.

Inspirado en MDN, en W3Schools, en Codepen, en el crack de Manz y en mil sitios de documentación sobre desarrollo web. Quería aportar además de bloques teóricos con ejemplos, la gamificación de los retos y el sistema de test que ya tenía en culTest .

Si te gustó, si no te gustó, si quieres saludarme, o invitarme a 🍻 no dudes en escribirme en cristianeslava@gmail.com .