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 constructorPromise con una función que recibe dos parámetros: resolve y reject.
Promise Resuelta (Fulfilled)
- Se crea la Promise (estado: pending)
- Se imprime la Promise en la consola (muestra
Promise { <pending> }) - Después de 2 segundos, se llama a
resolve() - La Promise cambia a estado fulfilled
- Se ejecuta el callback en
.then() - Se imprime ”✅ Operación exitosa”
Promise Rechazada (Rejected)
- Se crea la Promise
- Después de 2 segundos, se llama a
reject() - La Promise cambia a estado rejected
- Se salta el
.then()y se ejecuta.catch() - Se imprime ”❌ Hubo un error”
Consumir Promises: .then() y .catch()
Una vez que tienes una Promise, la “consumes” con.then() y .catch():
Métodos de Promise
.then(onFulfilled, onRejected)
.then(onFulfilled, onRejected)
Recibe dos funciones opcionales:Retorna una nueva Promise, lo que permite encadenar.
- La primera se ejecuta si la Promise es fulfilled
- La segunda se ejecuta si la Promise es rejected
.catch(onRejected)
.catch(onRejected)
Maneja errores. Es equivalente a También retorna una Promise, permitiendo encadenar más.
.then(null, onRejected)..finally(onFinally)
.finally(onFinally)
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:- 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
Ejemplo: De Callbacks a Promises
Con Callbacks (Callback Hell)
Con Promises
Promise.all(): Múltiples Promises en Paralelo
Cuando necesitas esperar a que varias Promises terminen:- 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
- Promise.race()
- Promise.allSettled()
- Promise.any()
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