How to return values from async functions using async-await from function? [duplicate]
Solution 1:
You cant await
something outside async
scope. To get expected result you should wrap your console.log
into async IIFE i.e
async function getData() {
return await axios.get('https://jsonplaceholder.typicode.com/posts');
}
(async () => {
console.log(await getData())
})()
Working
sample.
More information about async/await
Since axios
returns a promise the async/await
can be omitted for the getData
function like so:
function getData() {
return axios.get('https://jsonplaceholder.typicode.com/posts');
}
and then do same as we did before
(async () => {
console.log(await getData())
})()
Solution 2:
your function getData will return a Promise.
So you can either:
-
await
the function as well to get the result. However, to be able to useawait
, you need to be in anasync
function, so you need to 'wrap' this:async function callAsync() { var x = await getData(); console.log(x); } callAsync();
(I named the function for sake of clarity, but in this scenario, one would rather use an anonymous function call; see TheReason's answer.)
or
-
use the result as a normal Promise, which is what an async function returns.
You have to usethen
with a callback:getData().then(x => { console.log(x); });
Solution 3:
The other answers have covered this fine; but I'd like to chip in and say get in the habit of creating and calling a main
function rather than run things in the global scope. i.e.
async function main(){
let result = await getData();
}
main().catch(console.log);
This is pretty clear to anyone reading your code that this is your app entry point