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

Capítulo 2: Callbacks

Los callbacks son la forma fundamental de trabajar con código asíncrono en JavaScript. Un callback es simplemente una función que se pasa como argumento a otra función para que sea ejecutada posteriormente. Este capítulo cubre cómo usarlos correctamente y sus limitaciones.

2.1. ¿Qué es un callback? Función pasada como argumento

Un callback es una función que se pasa a otra función como argumento, para que sea llamada más tarde.

// Ejemplo simple
function saludar(nombre, callback) {
    console.log(`Hola, ${nombre}`);
    callback(); // Ejecutar el callback
}

function despedir() {
    console.log("¡Adiós!");
}

saludar("Juan", despedir);

// Output:
// Hola, Juan
// ¡Adiós!

Los callbacks se usan típicamente en código asíncrono para ejecutar una función cuando una operación termina:


2.2. Callbacks síncronos vs asíncronos

Callbacks síncronos (ejecutados inmediatamente)

Callbacks asíncronos (ejecutados después)


2.3. Error-first callbacks: Patrón estándar

En JavaScript, existe un patrón estándar para callbacks asíncronos: el error-first callback. El primer argumento es siempre un error (o null si no hay error).

Ejemplo exitoso:


2.4. Limitaciones: El "callback hell" o "pyramid of doom"

Cuando necesitas hacer múltiples operaciones asíncronas en secuencia, los callbacks se anidan cada vez más. Esto es el "callback hell".

Ejemplo del problema:

Por qué es un problema:

  1. Difícil de leer: Tienes que seguir la indentación

  2. Difícil de mantener: Añadir lógica nueva requiere reorganizar todo

  3. Gestión de errores incómoda: Necesitas if (error) en cada nivel

  4. Propenso a errores: Fácil cometer fallos


2.5. Cuándo usar callbacks y cuándo evitarlos

✓ Usar callbacks cuando:

  • Son callbacks síncronos de bibliotecas (Array.forEach, Array.map)

  • Trabajas con APIs antiguas que solo soportan callbacks

  • El flujo es simple (una o dos operaciones)

❌ Evitar callbacks cuando:

  • Necesitas múltiples operaciones en secuencia

  • Quieres código más legible y mantenible

  • Necesitas un mejor manejo de errores


2.6. Convertir callbacks en Promesas

La solución al callback hell es usar Promesas (siguiente capítulo), pero puedes convertir un callback a una promesa:


Resumen del Capítulo

Los callbacks son la forma más básica de trabajar con código asíncrono, pero tienen limitaciones importantes. Para múltiples operaciones secuenciales, el anidamiento de callbacks crea código ilegible (callback hell). Las Promesas, que veremos en el próximo capítulo, resuelven este problema.

💡 Conceptos Clave:

  • Callback: Función pasada como argumento para ejecutar después

  • Callbacks síncronos: Se ejecutan inmediatamente (ej: Array.forEach)

  • Callbacks asíncronos: Se ejecutan después (ej: setTimeout)

  • Error-first pattern: Primer argumento es el error (null si sin error)

  • Callback hell: Anidamiento profundo cuando hay múltiples operaciones

  • "Pyramid of doom": Indentación cada vez más profunda

  • Promisify: Convertir callbacks a Promesas

  • Limitación: Difícil de leer y mantener con múltiples operaciones

🤔 Preguntas de Reflexión:

  1. ¿Cuál es la diferencia entre un callback síncrono y uno asíncrono?

  2. ¿Qué es el patrón error-first callback y por qué es estándar?

  3. ¿Qué es "callback hell" y cuándo aparece?

  4. ¿Por qué es difícil de mantener el código con muchos callbacks anidados?

  5. ¿Cómo convertirías una función con callback en una Promesa?

  6. ¿En qué casos seguirías usando callbacks en lugar de Promesas?

  7. Escribe una función que acepta un callback y es ejecutada asíncronamente.


Última actualización

¿Te fue útil?