¿Cómo puedo devolver el valor de una función asíncrona? Traté de gustar esto
const axios = require('axios'); async function getData() { const data = await axios.get('https://jsonplaceholder.typicode.com/posts'); return data; } console.log(getData());me devuelve esto,
Promise { <pending> }No puede await algo fuera del alcance async . Para obtener el resultado esperado, debe envolver su console.log en asíncrono IIFE, es decir
async function getData() { return await axios.get('https://jsonplaceholder.typicode.com/posts'); } (async () => { console.log(await getData()) })() Muestra de Working .
Más información sobre async/await
Dado que axios devuelve una promesa, se puede omitir async/await await para la función getData de la siguiente manera:
function getData() { return axios.get('https://jsonplaceholder.typicode.com/posts'); }y luego hacer lo mismo que hicimos antes
(async () => { console.log(await getData()) })()su función getData devolverá una Promesa.
Así que puedes:
await la función también para obtener el resultado. Sin embargo, para poder usar await , debe estar en una función async , por lo que debe 'envolver' esto:
async function callAsync() { var x = await getData(); console.log(x); } callAsync();(Nombré la función en aras de la claridad, pero en este escenario, uno preferiría usar una llamada de función anónima; vea la respuesta de TheReason).
o
use el resultado como una Promesa normal, que es lo que devuelve una función asíncrona.
Tienes que usar then con una devolución de llamada:
getData().then(x => { console.log(x); });Las otras respuestas han cubierto esta multa; pero me gustaría participar y decir que se acostumbre a crear y llamar a una función main en lugar de ejecutar cosas en el ámbito global. es decir
async function main(){ let result = await getData(); } main().catch(console.log);Esto es bastante claro para cualquiera que lea su código que este es el punto de entrada de su aplicación