ventajas - promises javascript w3schools
asíncrono/espera siempre devuelve promesa (2)
El valor de retorno de una función asíncrona siempre será un objeto AsyncFunction , que devolverá una Promise
cuando se llame. No puedes cambiar ese tipo de retorno. El punto de async/await
es esperar fácilmente a que se complete otro proceso async dentro de una función async.
Estoy probando la funcionalidad asíncrona / espera. Tengo tal código que imita una solicitud:
const getJSON = async () => {
const request = () => new Promise((resolve, reject) => (
setTimeout(() => resolve({ foo: ''bar''}), 2000)
));
const json = await request();
return json;
}
Cuando uso el código de esta manera
console.log(getJSON()); // returns Promise
devuelve una Promesa
Pero cuando llamo a esta línea de código
getJSON().then(json => console.log(json)); // prints { foo: ''bar'' }
imprime json como se esperaba
¿Es posible usar solo código como console.log(getJSON())
? ¿Qué no entiendo?
Cada función async
devuelve un objeto Promise
. La declaración de await
opera en una Promise
, a la espera de que la Promise
resolve
s o reject
s.
Así que no, no puede hacer console.log
en el resultado de una función asíncrona directamente, incluso si utiliza await
. El uso de await
hará que su función espere y luego devuelva una Promise
que se resuelve inmediatamente, pero no la desenvolverá por usted. Aún necesita desempaquetar la Promise
devuelta por la función async
, ya sea usando await
o usando .then()
.
Cuando usa .then()
lugar de console.log
ging directamente, el método .then()
hace que el resultado de la Promesa esté disponible para usted. Pero no puedes obtener el resultado de la Promise
fuera de la promesa. Eso es parte del modelo de trabajar con Promesas.