Promesas
Según nos dicen desde MDN Web Docs "Una Promise (promesa en castellano) es un objeto que representa la terminación o el fracaso de una operación asíncrona". Se entiende por operación asíncrona aquél código que es ejecutado y cuyo resultado es devuelto tan pronto como se pueda. Un ejemplo sería una llamada a un servicio REST. Realizamos la llamada y cuando se obtengan los resultados serán devueltos sin la necesidad de que la ejecución se quede parada esperando los resultados.
Declaración de una promesa
let promesa = new Promise(function(resolve, reject){
//setTimeout llama a la función resolve a los tres segundos
setTimeout(function() { resolve();}, 3000);
});
promesa
.then(
//Resolve
function(){
console.log("Retorno de la promesa correcto");
},
function(){
console.error("Error en la promesa");
}
)
De la línea de código 1 a la 4 nos creamos la promesa. La promesa recibe dos parámetros, resolve
y reject
. En el interior de la promesa simulamos la realización de una tarea que tarda 3 segundos mediante setTimeout
. Tras finalizar los 3 segundos llamamos a la función recibida en el parámetro resolve
para indicar que todo finalizó correctamente. Si hay algún error podemos invocar la función recibida en el parámetro reject
.
De la línea 5 a la 14 se invoca a la promesa. Pasamos como argumentos (en el then
) dos funciones anónimas con dos instrucciones console
en su interior para informar del resultado. Estas funciones son las recibidas como los parámetros resolve
y reject
.
Anidamiento de operaciones
Es posible ejecutar dos o más operaciones asíncronas seguidas anidadas mediante el then
. Cada operación se inicia con el resultado de la operación anterior al terminar en éxito. Si salta en una excepción en alguna de las llamadas, la cadena de llamadas se interrumpe y se busca un manejador catch
. Ver siguiente ejemplo
fetch("URL", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));