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

Capítulo 3: Promesas

Las promesas son el pilar de la programación asíncrona moderna en JavaScript. Resuelven el problema del callback hell y proporcionan una forma clara y predecible de trabajar con operaciones asincrónicas. Este capítulo cubre todo lo que necesitas saber sobre Promesas.

3.1. Creación de promesas: new Promise(executor)

Una promesa es un objeto que representa una operación asíncrona que terminará en el futuro (o ha terminado ya).

// Sintaxis: new Promise((resolve, reject) => { ... })

const miPromesa = new Promise((resolve, reject) => {
    // resolve: Cuando todo va bien
    // reject: Cuando hay un error
    
    if (Math.random() > 0.5) {
        resolve("¡Éxito!");
    } else {
        reject("¡Error!");
    }
});

// Las Promesas están listas para usar después de crearlas
console.log(miPromesa); // Promise { <pending> }

Ejemplo práctico: Simular una descarga


3.2. Estados: pending, fulfilled, rejected

Una Promesa tiene exactamente tres estados:

  1. pending (pendiente): La operación está en progreso

  2. fulfilled (cumplida): La operación terminó exitosamente (se llamó resolve)

  3. rejected (rechazada): Hubo un error (se llamó reject)

Cambio de estado (irreversible):


3.3. Métodos .then(), .catch(), .finally()

Para trabajar con promesas, usamos estos métodos para especificar qué hacer cuando se resuelvan o rechacen.

.then(onFulfilled, onRejected)

Se ejecuta cuando la Promesa se cumple (fulfill) o se rechaza (reject).

.catch(onRejected)

Solo maneja rechazos (es equivalente a .then(null, onRejected)).

.finally(onFinally)

Se ejecuta siempre, sin importar si fue éxito o error. Útil para limpiar o cerrar conexiones.


3.4. Promise chaining: Encadenar promesas

La verdadera potencia de las promesas es poder encadenarlas de forma clara sin callback hell.

Forma abreviada (arrow functions):


3.5. Propagación de errores en cadenas

Si alguna promesa en la cadena se rechaza, el error se propaga automáticamente al siguiente .catch().

Capturar y continuar:


3.6. Promesas ya resueltas y perezosas

Promesas inmediatamente resueltas:

Promesas perezosas (lazy):

Las promesas comienzan a ejecutarse inmediatamente por defecto. Para hacer una "lazy Promise" que espere a ser evaluada, necesitas una función:


Resumen del Capítulo

Las promesas reemplazan los callbacks con una forma de manejar asincronía más legible y segura. El chaining de Promises permite escribir flujos secuenciales sin anidamiento profundo. Entender estados, .then(), .catch() y propagación de errores es fundamental para JavaScript asíncrono moderno.

💡 Conceptos Clave:

  • Promise: Objeto que representa una operación asíncrona futura

  • Estados: pending, fulfilled, rejected (inmutables)

  • resolve/reject: Funciones para cambiar el estado

  • .then(): Maneja éxito o error

  • .catch(): Maneja solo errores

  • .finally(): Se ejecuta siempre

  • Promise chaining: Encadenar operaciones sin callback hell

  • Propagación de errores: Los errores se propagan automáticamente

  • Eager vs Lazy: Las promesas son eager por defecto (se ejecutan inmediatamente)

🤔 Preguntas de Reflexión:

  1. ¿Cuáles son los tres estados de una promesa?

  2. ¿Cuál es la diferencia entre .then() y .catch()?

  3. ¿Por qué .finally() es útil incluso aunque retorne nada?

  4. ¿Cómo se propagan los errores en una cadena de promesas?

  5. ¿Qué sucede si llamas resolve y luego reject en la misma promesa?

  6. ¿Por qué es más legible una cadena de promesas que callbacks anidados?

  7. Crea una promesa que simule una descarga y encadena operaciones después.


Última actualización

¿Te fue útil?