How to return values from async functions using async-await from function?
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
Related videos on Youtube
King Rayhan
Updated on September 04, 2021Comments
-
King Rayhan over 2 years
How can I return the value from an async function? I tried to like this
const axios = require('axios'); async function getData() { const data = await axios.get('https://jsonplaceholder.typicode.com/posts'); return data; } console.log(getData());
it returns me this,
Promise { <pending> }
-
Pac0 about 6 yearsconsole.log(await getData()); (if this code is another function, then it need to be marked as async as well)
-
Pac0 about 6 yearsor treat this as a Promise, and do it the 'old' way :
getData().then(x => { console.log(x); } )
-
Poul Bak almost 4 years@pac0: That does not return a value, which is what the question is about.
-
Friedrich almost 3 yearsIn the developer console the following works
async function getData() {return await fetch('https://jsonplaceholder.typicode.com/posts');}
followed by justawait getData()
.
-
-
King Rayhan about 6 years(async () => { console.log(await getData()) })() what's going on here?
-
King Rayhan about 6 yearsare you running a annonymous async function. right?
-
Pac0 about 6 yearsbut you can use another 'named' function instead, if you need.