Skip to main content

Promises

Una Promise (promesa) es un objeto que representa el resultado eventual de una operación asíncrona. Las Promises hacen el código asíncrono más fácil de leer y mantener que los callbacks anidados.

¿Qué es una Promise?

Una Promise es un objeto que puede estar en uno de tres estados:
  • Pending (⏳ Pendiente): Estado inicial, la operación aún no ha terminado
  • Fulfilled (✅ Cumplida): La operación se completó exitosamente
  • Rejected (❌ Rechazada): La operación falló
Una vez que una Promise está fulfilled o rejected, su estado no puede cambiar. Se dice que está “settled” (resuelta).

Crear una Promise

Para crear una Promise, usas el constructor Promise con una función que recibe dos parámetros: resolve y reject.

Promise Resuelta (Fulfilled)

Flujo de ejecución:
  1. Se crea la Promise (estado: pending)
  2. Se imprime la Promise en la consola (muestra Promise { <pending> })
  3. Después de 2 segundos, se llama a resolve()
  4. La Promise cambia a estado fulfilled
  5. Se ejecuta el callback en .then()
  6. Se imprime ”✅ Operación exitosa”

Promise Rechazada (Rejected)

Flujo de ejecución:
  1. Se crea la Promise
  2. Después de 2 segundos, se llama a reject()
  3. La Promise cambia a estado rejected
  4. Se salta el .then() y se ejecuta .catch()
  5. Se imprime ”❌ Hubo un error”
Si una Promise es rejected y no tienes un .catch(), obtendrás un error “Unhandled Promise Rejection” en la consola.

Consumir Promises: .then() y .catch()

Una vez que tienes una Promise, la “consumes” con .then() y .catch():

Métodos de Promise

Recibe dos funciones opcionales:
  • La primera se ejecuta si la Promise es fulfilled
  • La segunda se ejecuta si la Promise es rejected
Retorna una nueva Promise, lo que permite encadenar.
Maneja errores. Es equivalente a .then(null, onRejected).
También retorna una Promise, permitiendo encadenar más.
Se ejecuta siempre, sin importar si la Promise fue fulfilled o rejected.
Útil para limpieza (ej: cerrar spinners de carga).

Encadenar Promises

Una de las grandes ventajas de las Promises es que puedes encadenarlas:
Ventajas sobre callbacks:
  • Código más plano (no hay pirámide de callbacks)
  • Un solo .catch() maneja errores de todos los pasos
  • Más fácil de leer y mantener
Cada .then() retorna una nueva Promise. Si retornas un valor, se envuelve automáticamente en una Promise resuelta.

Ejemplo: De Callbacks a Promises

Con Callbacks (Callback Hell)

Con Promises

¡Mucho más limpio y fácil de leer!

Promise.all(): Múltiples Promises en Paralelo

Cuando necesitas esperar a que varias Promises terminen:
Características:
  • Espera a que todas las Promises se resuelvan
  • Si cualquiera falla, Promise.all() es rejected inmediatamente
  • Retorna un array con todos los resultados en el mismo orden

Otros Métodos de Promise

Retorna la Promise que termine primero (fulfilled o rejected).
Útil para timeouts o racing conditions.

Manejo de Errores

Un .catch() para Todos

.catch() en el Medio

Si un .catch() no lanza un error, la cadena continúa normalmente. Esto permite recuperarse de errores.

Crear Promises de Valores

Buenas Prácticas

1

Siempre maneja errores

2

Retorna Promises en cadenas

3

Evita mezclar callbacks y Promises

Próximos Pasos

Async/Await

Aprende la sintaxis más moderna para trabajar con Promises

Fetch API

Usa Promises para hacer peticiones HTTP