w3schools ventajas tienen sobre sincronas qué promises promesas los las funciones español entre diferencia callbacks await async javascript asynchronous promise async-await ecmascript-2017

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.