Promesas en JS (Promises)
¿Qué son las promesas en JS?
Las promesas en JS, principalmente, representan algo que puede llegar a suceder en un futuro o nunca. Además, que se ejecute, no quiere decir que obtendremos el resultado esperado.
¿Cuál es el propósito de las promesas en JS?
Se utiliza para computaciones asíncronas. Su principal propósito es evitar el llamado “callback hell“, código complejo y difícil de mantener. Además, se ahorran líneas de código e indentación.
Un ejemplo de promesas en JS
Imaginemos que cumplimos años en 1 mes y nuestra madre nos dice que nos va a regalar nuestro videojuego favorito. Eso, precisamente, es nuestra promesa.
Cuando llegue nuestro cumpleaños, se ejecutará dicha promesa, sin embargo, no quiere decir que se cumplirá correctamente. En nuestro ejemplo, pueden pasar dos cosas:
- Nos regala el juego que queríamos.
- No tenemos el regalo que deseábamos y obtenemos una razón.
Creando promesas en JS
Se utiliza el constructor de Promise y se pasa una función con dos parámetros, resolve y reject, que nos permite indicar si ésta se resolvió o se rechazó.
Código: www.platzi.com
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
const promise = new Promise((resolve, reject) => { const number = Math.floor(Math.random() * 10); setTimeout( () => number > 5 ? resolve(number) : reject(new Error('Menor a 5')), 1000 ); }); promise .then(number => console.log(number)) .catch(error => console.error(error)); |
Lo que se hace en ese fragmento de código, es crear una nueva promesa que se va a ejecutar luego de 1 segundo. Consiste en generar un número aleatorio y preguntar si ese número es mayor a 5. Si lo es, la promesa se considera como cumplida correctamente, de lo contrario, se considera rechazada y se obtiene un error.
Estados de las promesas en JS
Se puede hablar de que existen 3 tipos de estado:
- Pendiente
- Resuelta
- Rechazada
Cuando se crea una promesa, por defecto, está pendiente. Cuando se cumple pasa a estar resuelta y cuando hay un error, pasa a estar rechazada.
En el fragmento de código anterior, cuando la promesa se encuentra resuelta, se ejecuta la función que pasamos en el método .then, si se encuentra rechazada, entonces se ejecuta la función en el método .catch.