Promesas
-
Son similares a los callbacks (funciones que se pasan como argumentos a otras fucniones), pero simplifican el proceso asíncrono
-
Estados:
-
pending
-
resolved
-
rejected
-
Declaración:
-
let example = new Promise(function(resolve, reject)) {
setTimeout(() => {
if (whatever) {
resolve('OK')
} else {
reject('NOT OK')
}
}, 1000)
}
-
resolve
y reject
son callbacks, es decir, hacen referencia a funciones
-
Por tanto, hay que crear una función para cada caso. Ej.:
-
para el parámetro
resolve
, creamos una función llamada callbackResolve que sustituirá al parámetro resolve
y hará lo que se le indique con su value
-
Ej.:
const callbackResolve = (value) => console.log('Result:', value); // Result: OK
-
para el parámetro
reject
, creamos una función llamada callbackReject que hará lo propio con el value de reject
-
Ej.:
const callbackResolve = (value) => console.log('Result:', value); // Result: NOT OK
-
Invocación:
-
example.then(callbackResolve, callbackReject)
-
Asincronía
-
Def.: código que tarda más en ejecutarse y afecta a la secuencialidad del resto
-
Las promesas son asíncronas, ya que se tarda cierto tiempo hasta que se devuelve lo que se ha requerido
-
Cuando utilizamos una función para retornar una promesa, tenemos que indicar que esa función va a ser asíncrona y que tenemos que esperar hasta obtener la respuesta para seguir ejecutando el resto del código:
-
async function example() {
const url = "http://...";
const res = await fetch(url); // Esperamos a la llamada a la api
const resJson = await res.json(); // Esperamos a que el método json la convierta para poder usar keys y values
return resJson.name (por ej, si fuera solo un objeto con un campo name)
}
-
añadir
try catch
para la gestión en caso de error
-
También se puede manejar mediante
then
y catch
, pero es más flexible la manera anterior