Promise Javascript
Javascript Lenguaje de Scripting Js
Aprender javascript es muy versátil para los desarrolladores web ya que es un lenguaje de programación rico en funciones y características. Uno de estos es promise y, si aspiras a programar en Javascript, tienes que conocerlo. Desde 2015, las promise se han integrado de forma nativa en el lenguaje JavaScript sin la ayuda de bibliotecas para importar.
Cuando escribimos instrucciones en JavaScript, se ejecutan en secuencias, es decir, una línea a la vez.
Esto significa que cada línea de código debe ejecutarse por completo antes de pasar a la siguiente: estamos hablando de programación asíncrona.
¿Qué es una promise en el lenguaje JavaScript?
Las promise también se definen por su estado. Introducen la programación asíncrona hasta cierto punto. Para que quede claro, es como si en el programa que estamos compilando insertamos una referencia con el "promete seguirlo" lo antes posible con un dato, y a cambio el programa nos brinda la posibilidad de continuar con las siguientes líneas.
Las promise se diseñaron para representar operaciones incompletas en un momento preciso del tiempo de ejecución, que, sin embargo, se completarán en el futuro. Es un componente adoptado en el caso de procesamiento asíncrono. Hay tres estados de la promise:
- Resolved: una promise se define resolved cuando el valor que representa está disponible, es decir, cuando devuelve el valor.
- Rejected: Una promise se define rejected cuando la tarea asincrónica asociada no devuelve un valor o en caso de que se produzca una excepción porque el valor devuelto no se considera válido.
- Pending: Una promise es pending cuando no se resuelve ni se rechaza, es decir, se ha iniciado la solicitud para ejecutar una tarea asíncrona pero aún no hemos recibido un resultado.
Una promise puede pasar de un estado pending a uno solo de los otros dos. No son posibles otras transaciones de estado.
El concepto de promise en JavaScript es similar al de callback function en JavaScript. Si recuerdas un poco la cuestión de las funciones en Javascript, sabrás que una callback function es una función pasada como argumento a otra función.
En cuanto a la sintaxis de Javascript de la promise, esta es muy simple; para instanciarlo simplemente escribe:
var promise = new Promise(handler);
El constructor Promise prevee solo un argumento. Tiene la tarea de gestionar la resolución de la instancia de la misma promise. El promise handler se puede definir así:
var promise = new Promise(function(resolve, reject) {
if (statement) {
resolve(value);
} else {
reject(reason);
}
});
El promise handler actúa en dos canales, tomando dos funciones como argumentos. El primer parámetro corresponde a la función a llamar cuando el valor de retorno de la operación asíncrona está disponible. El valor de retorno de la actividad asincrónica se pasa a la función en cuestión.
El segundo corresponde a la función a invocar cuando la promise no se puede resolver, por ejemplo, si se ha producido un error o si el valor devuelto no se considera válido. En este caso, el motivo del reject se pasa a la función, como la excepción que se produjo.
Podemos decir que las promise traen dos resultados a gestionar, el primero por devolver el resultado, el segundo por los errores, si se producen. El resultado se devolverá a través de la cláusula "then", mientras que el error se puede manejar a través de "catch".
El método JavaScript then() una vez que la promesa se ha asignado a una variable, podemos procesar el resultado asincrónico que se devolverá a través del propio método.
image(img).then(
(data) => { showImg(data) }
)
El método then() solo se podrá usar si la función de image devuelve una promise, ya que la clase Promise proporciona el método mencionado anteriormente. El método then() en JavaScript puede tener diferentes significados. En el caso de la promise puede tomar dos funciones como parámetros, y es el procedimiento recomendado, especialmente si se quiere gestionar el rechazo de la promise considerándola una excepción. Then() te permite tener una mayor versatilidad en el manejo de las promesas y ver el resultado asíncrono que devuelve la función desde diferentes puntos de vista.
Una promise se ejecuta inmediatamente y se resuelve en un solo valor o se rechaza con un objeto de error. Si se rechaza la promesa, el valor devuelto pasa a través de cualquier then() y es recogido por el JavaScript catch() que tiene la tarea de manejar el error, transformándolo en una excepción.
getUser()
.then(getName)
.then(displayName)
.catch(manageError);
In questo caso il catch funge da singolo gestore del rifiuto della promise, evitare di passare lo stesso gestore per ciascun metodo then() e utilizzare il metodo catch().
El método JavaScript finally() siempre se realiza independientemente de si la promise se cumple o se rechaza. En otras palabras, el método finally() se ejecuta cuando se instancia la promesa.
En el método JavaScritp finally(), puedes añadir código que limpie el recurso cuando se crea una instancia de la promesa, independientemente de su resultado.
Usando el método finally(), puedes evitar el código redundante en los métodos then() e catch() como este:
promise
.then(result => {
// process the result
})
.catch(error => {
// handle the error
})
.finally(() => {
// clean up the resources
});
Tiene el mismo valor que finally que encontramos en un bloque try…catch…finally. En el código síncrono, el bloque finalmente limpia los recursos. En el código asíncrono, se usa el método finally() en su lugar. En el caso de finally, el resultado de la promise no importa. Catch(), por otro lado, se llama solo cuando se llama a una excepción para manejar un error y, por lo tanto, depende del estado de la promise en el código asíncrono que se ha escrito.
Si leer Promise en Javascript te ha intrigado y te apasiona el lenguaje Javascript, prepárate: hemos preparado una guía de Javascript online en italiano para que te adentres en este mundo y te prepares para aprender javascript. Stay tuned.
© 2022 Aulab. Todos los derechos reservados • P.IVA: IT07647440721 • Política de privacidad