Introducción a las Promesas
¡Las Promesas de JavaScript son divertidas!
Promesas… ¿Cuál es su propósito?
Cada vez que ejecutas código, hay dos resultados posibles: éxito o fracaso.
Si ese código es asíncrono por naturaleza, puede ser más difícil depender de ese resultado de forma fiable.
Las Promesas ofrecen una forma práctica de manejar esto.
+--Promise---+ | | | <-o bien-> | | | <-------+ +--------> |¿Fracaso? ¿Éxito? | | | v v (Rechazada) (Resuelta)Nota al margen: Aunque las Promesas deberían resolverse o rechazarse, pueden fallar en hacer cualquiera de las dos cosas. Esto provoca que las aplicaciones se cuelguen, y puede ser muy difícil de depurar.
¿De dónde vienen las Promesas?
Muchas veces no necesitarás crear una promesa tú mismo. APIs nativas como fetch y bibliotecas populares como axios ya devuelven Promesas.
Sin embargo, si debes crear una promesa, hay 2 formas de hacerlo:
Creando Promesas #1/2:
La forma más simple de crear una Promesa es con el método auxiliar: Promise.resolve().
Puedes envolver (o “convertir”) cualquier valor en una Promesa usando Promise.resolve(valor).
// Sin Promesas:function add10(num) { return num + 10}
// Con Promesas:function add10Promised(num) { return Promise.resolve(num + 10)}
console.log(add10(10)) //=> 20
add10Promised(10) .then(x => console.log(x)) //=> 20Creando Promesas #2/2:
Otro método más flexible: usa el constructor Promise.
new Promise(callback) acepta una función callback con la siguiente interfaz:
new Promise(function(resolve, reject) { // Los argumentos `resolve` y `reject` son ambas funciones. // typeof resolve === 'function' // typeof reject === 'function'
// `resolve(result)` debe ejecutarse cuando la promesa se cumple // `reject(Error)` debe ejecutarse si la promesa es rechazada})API de Promesas
La API de Promesas en realidad tiene un número pequeño de métodos.
2 funciones de instancia y 4 funciones estáticas/auxiliares.
Métodos de instancia de Promise
Acceder a los valores de una promesa no funcionará con trucos habituales (p. ej., console.log(promise)).
Todas las promesas devuelven éxito (mediante .then(fn)) o fallo (mediante .catch(fn)).
Métodos auxiliares de Promise
Promise.resolve(value)- Convierte cualquier valor en una PromesaPromise.reject(Error)- Crea un valor de Promesa de fallo, que activa el.catch()subsiguientePromise.all([...promises])- Espera a que TODAS las promesas de un array se completenPromise.race([...promises])- Se resuelve tan pronto como la primera promesa se resuelve