Las promesas son una forma de implementar la programación asíncrona en JavaScript (ES6, que también se conoce como ECMAScript-6). Una Promesa actúa como un contenedor de valores futuros. Por ejemplo, si pide comida de cualquier sitio para entregarla en su lugar, ese registro de pedido será la promesa y la comida será el valor de esa promesa. Entonces, los detalles del pedido son el contenedor de la comida que ordenó. Vamos a explicarlo con otro ejemplo. Usted ordena una cámara increíble en línea. Después de realizar su pedido, recibirá un recibo del pedido. Ese recibo es una Promesa de que su pedido le será entregado. El recibo es un marcador de posición para el valor futuro, es decir, la cámara. Promesas utilizadas en JavaScript para programación asíncrona. Para la programación asíncrona, JavaScript usa devoluciones de llamada, pero hay un problema al usar la devolución de llamada, que es el infierno de devolución de llamada (devoluciones de llamada múltiples o dependientes) o Pyramid of Doom. El uso de ES6 Promise simplemente evitará todos los problemas asociados con la devolución de llamada. Necesidad de promesas: las devoluciones de llamada son excelentes cuando se trata de casos básicos. Pero mientras desarrolla una aplicación web donde tiene mucho código. Las devoluciones de llamada pueden ser un gran problema. En casos complejos, cada devolución de llamada agrega un nivel de anidamiento que puede hacer que su código sea realmente complicado y difícil de entender. En palabras simples, tener múltiples devoluciones de llamada en el código aumenta la complejidad del código en términos de legibilidad, ejecutabilidad y muchos otros términos. Este anidamiento excesivo de devoluciones de llamada a menudo se denomina Infierno de devolución de llamada . Ejemplo: Infierno de devolución de llamada
javascript
f1(function(x){ f2(x, function(y){ f3(y, function(z){ ... }); }); });
Para lidiar con este problema, usamos Promesas en lugar de devoluciones de llamada. Haciendo Promesas: Una Promesa se crea cuando no estamos seguros de si la tarea asignada se completará o no. El objeto Promise representa la eventual finalización (o falla) de una operación asincrónica (asincrónica) y su valor resultante. Como sugiere el nombre de la vida real, una Promesa se cumple o se rompe. Una Promesa está siempre en uno de los siguientes estados:
- cumplida: la acción relacionada con la promesa tuvo éxito.
- rechazado: la acción relacionada con la promesa falló.
- pendiente: la promesa aún está pendiente, es decir, aún no se ha cumplido o se ha rechazado.
- resuelta: la promesa ha sido cumplida o rechazada
Sintaxis:
const promise = new Promise((resolve,reject) => {....});
Ejemplo:
javascript
const myPromise = new Promise((resolve, reject) => { if (Math.random() > 0) { resolve('Hello, I am positive number!'); } reject(new Error('I failed some times')); })
Devoluciones de llamada a promesas: hay dos tipos de devoluciones de llamada que se utilizan para manejar las promesas .then() y .catch() . Se puede usar para manejar promesas en caso de cumplimiento (se cumple la promesa) o rechazo (se rompe la promesa).
- .then(): Se invoca cuando se cumple o se rompe una promesa. Se puede enstringr para manejar el cumplimiento o rechazo de una promesa. Toma en dos funciones como parámetros. El primero se invoca si se cumple la promesa y el segundo (opcional) se invoca si se rechaza la promesa. Ejemplo: Manejo del rechazo de Promesa usando .then()
javascript
var promise = new Promise(function(resolve, reject) { resolve('Hello, I am a Promise!'); }) promise.then(function(promise_kept_message) { console.log(promise_kept_message); }, function(error) { // This function is invoked this time // as the Promise is rejected. console.log(error); })
- .catch() se puede usar para manejar los errores (si los hay). Solo toma una función como parámetro que se usa para manejar los errores (si los hay). Ejemplo: manejo del rechazo de la promesa (o errores) usando .catch()
javascript
const myPromise = new Promise((resolve, reject) => { if (Math.random() > 0) { console.log('resolving the promise ...'); resolve('Hello, Positive :)'); } reject(new Error('No place for Negative here :(')); }); const Fulfilled = (fulfilledValue) => console.log(fulfilledValue); const Rejected = (error) => console.log(error); myPromise.then(Fulfilled, Rejected); myPromise.then((fulfilledValue) => { console.log(fulfilledValue); }}).catch(err => console.log(err));