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.