Bienvenidos sean a este post, hoy hablaremos sobre las «promesas».
En este post vimos como son las funciones asincronicas, estas a diferencias de las funciones comunes o sincronicas no devuelven inmediatamente un valor final, por esta razon existen las promesas dado que generan un objeto denominado AsyncFunction la cual a su vez puede devolver dos tipos de valores, uno que se haya realizado correctamente y otro con un error, para ello puede tomar tres estados distintos:
- pending, estado inicial ni rechazado ni ccumplido
- fulfilled, estado de cumplido
- rejected, estado de rechazado (error)
Cuando se inicia una promesa esta siempre tomara el estado pending como inicio, despues puede tomar cualquiera de los otros dos valores dependiendo si hubo exito o no, cuando se adjunta a un manejador este habra tomado alguno de los dos estados y se llamara al manejador pertinente evitando una carrera entre la operacion de la funcion asincronica y la conexion de los manejadores, pasemos a ver los distintos metodos que tenemos disponible:
- Promise.prototype.then()
- Promise.prototype.catch()
- Promise.prototype.finally()
El primer metodo (then) es el encargado de «consumir» para devolver un objeto de promesa, este metodo en particular permite recibir hasta dos argumentos, uno para ejecutar una funcion en caso de ser exitoso y otro para ejecutar una funcion en caso de error, otra particularidad de este metodo es que puede ser encadenado entre varios y se ira procesando un metodo detras del otro, pasemos al siguiente metodo.
El segundo metodo (catch) es el encargado de manejar los errores, del metodo anterior podemos hacer que omita la funcion para manejar los errores y podemos hacer que sean manejados con catch para que sea mejor procesado.
Por ultimo el tercer metodo es cual realmente se encargara de devolver la promesa ya sea que se haya cumplido o rechazado, a su vez todos estos metodos pueden concatenarse entre ellos, les muestro un ejemplo:
miPromesa
.then(resueltoA)
.then(resueltoB)
.catch(incumplido);
Con todo esto comentado vamos a realizar un ejemplo simple para verlo en accion, en este caso crearemos un nuevo archivo al cual llamaremos promesa.js y le agregaremos el siguiente codigo:
promesa.js
const prompt = require("prompt");
prompt.start();
prompt.get('v', function(error, resultado){
if (error)
{
console.log(error);
return 1;
}
let miPromesa = new Promise(function(resuelto, rechazado) {
if (resultado.v == 0)
{
resuelto("Ok");
} else {
rechazado("Error");
}
});
miPromesa.then(
function(valor) { console.log(valor); },
function(rechazo) { console.log(rechazo); }
);
});
Antes de probar el script deben instalar el modulo prompt si no lo poseen, simplemente ejecuten este comando desde la terminal:
npm install prompt
Nota: En la actualidad el npm es parte de la instalacion de node.js.
Una vez instalado y activado continuaremos con el codigo, primero importaremos el modulo prompt y lo asignaremos a una constante con el mismo nombre, luego lo usaremos para iniciarlo por medio de start, una vez iniciado utilizaremos el metodo get para obtener un valor, primero asignaremos el identificador para el valor que ingresaremos, lo siguiente es la funcion que usaremos para procesar este dato, tiene dos argumentos el primero sera para manejar el error y el segundo sera para poder proccesar el valor o los valores ingresados, dentro de esta funcion primero chequearemos si existe algun error y en caso de existir lo devolvemos y salimos del script.
Nota: Si quieren saber un poco mas sobre prompt les recomiendo este post.
Lo siguiente sera crear una «promesa», en este caso la llamaremos miPromesa y como argumento le pasaremos una funcion anonima, puede usar una comun tambien, y ella tendra dos argumentos, uno para cuando se hace correctamente y otra para cuando es rechazada, dentro del bloque tendremos un condicional donde verificaremos si el valor ingresado, resultado.v, es igual a 0 y en caso de ser verdadero procede a asignar el valor Ok para el argumento resuelto, en cambio lo pasaremos el valor Error a rechazado, nuestro siguiente paso sera usar un then sobre la promesa antes generada y le pasaremos dos funciones anonimas, en este caso los valores que asignamos como argumentos se completaran en base al valor generado a cada argumento al momento de generar la promesa, en cualquiera de los dos casos mostramos el valor asignado al argumento correspondiente, con todo esto comentado vamos a ver como trabaja mediante el siguiente video
Este es un breve resumen de lo que es una promesa, con un pequeño ejemplo para verlo en accion si en el futuro necesito agregar mas informacion porque es necesario para el curso, no duden que modificare este post o simplemente genere uno nuevo.
En resumen, hoy hemos vusto que es una promesa, como trabaja, para que se usa, los distintos estados posibles, para que fueron creadas principalmente y un ejemplo simple para poder verlo en accion, espero les haya sido de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.50
