circle-info
Desarrollo en curso, en breve se publicarán el resto de temas.

Capítulo 1: Introducción a la Asincronía

La asincronía es uno de los conceptos más importantes en JavaScript moderno. Sin ella, las aplicaciones web se congelarían esperando a que terminen operaciones lentas como descargas de archivos o consultas a bases de datos. Este capítulo introduce el concepto fundamental del código asíncrono.

1.1. ¿Qué es la asincronía? Operaciones bloqueantes vs no bloqueantes

Operación bloqueante (síncrona): El código espera a que termine una tarea antes de continuar.

// Síncrono: Bloquea la ejecución
function cargarDatos() {
    console.log("1. Inicio de carga");
    
    // Simular una operación lenta (2 segundos)
    const inicio = Date.now();
    while (Date.now() - inicio < 2000) {
        // Esperar... la página está "congelada"
    }
    
    console.log("2. Datos cargados");
}

console.log("Antes");
cargarDatos();
console.log("Después");

// Output:
// Antes
// 1. Inicio de carga
// (espera 2 segundos... la página no responde)
// 2. Datos cargados
// Después

Operación no bloqueante (asíncrona): El código inicia una tarea y continúa sin esperar.

circle-check

1.2. El Event Loop: Cómo JavaScript ejecuta código asíncrono

JavaScript es single-threaded (un solo hilo de ejecución), pero parece ser multithread porque usa el Event Loop.

El Event Loop es un mecanismo que implementa los siguientes pasos:

  1. Ejecuta el código síncrono (Call Stack)

  2. Cuando se completa, revisa si hay tareas asíncronas que se han completado

  3. Las ejecuta en orden


1.3. Call Stack, Web APIs y Task Queue

Visualiza cómo JavaScript procesa código:

El Event Loop funciona así:

  1. Ejecuta TODO lo que hay en el Call Stack

  2. Cuando se vacía, procesa la Microtask Queue (Promises)

  3. Cuando se vacía, procesa la Macrotask Queue (setTimeout, eventos)

  4. Vuelve al paso 2


1.4. setTimeout: Primera aproximación al código asíncrono

setTimeout es la forma más simple de entender asincronía. Programa una función para ejecutarse después de un tiempo.

setInterval: Ejecutar repetidamente cada X milisegundos.


1.5. Ejemplos prácticos del orden de ejecución

Ejemplo 1: Predecir el orden

Ejemplo 2: Mezclar Promesas y setTimeout

Ejemplo 3: Operación que parece lenta pero no lo es


Resumen del Capítulo

La asincronía es fundamental para JavaScript en el navegador. El Event Loop permite que JavaScript ejecute código síncrono rápidamente sin bloquear, mientras maneja operaciones lentas en paralelo. Entender Call Stack, Task Queues y el orden de ejecución es crucial para escribir código predecible.

💡 Conceptos Clave:

  • Síncrono: Bloquea el flujo de ejecución (esperamos)

  • Asíncrono: No bloquea (continuamos mientras se ejecuta)

  • Event Loop: Mecanismo que orquestra la ejecución

  • Call Stack: Ejecuta código síncrono línea por línea

  • Macrotask Queue: setTimeout, eventos, I/O

  • Microtask Queue: Promises, queueMicrotask

  • Single-threaded: JavaScript solo tiene un hilo, pero parece multithread

  • setTimeout/setInterval: Operaciones asíncronas simples

🤔 Preguntas de Reflexión:

  1. ¿Cuál es la diferencia entre código bloqueante y no bloqueante?

  2. ¿Por qué console.log con setTimeout(0) se ejecuta después del código síncrono?

  3. ¿Qué es el Event Loop y cómo maneja diferentes tipos de tareas?

  4. ¿Cuál se ejecuta primero: una Macrotask o una Microtask?

  5. ¿Por qué JavaScript es single-threaded pero parece responder a múltiples cosas a la vez?

  6. Predice el orden de ejecución de un código que mezcla setTimeout, Promise y console.log


Última actualización

¿Te fue útil?