问题
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> }
回答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())
})()
Worked 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())
})()
回答2:
your function getData will return a Promise.
So you can either:
awaitthe function as well to get the result. However, to be able to useawait, you need to be in anasyncfunction, 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 usethenwith a callback:getData().then(x => { console.log(x); }
回答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 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
来源:https://stackoverflow.com/questions/49938266/how-to-return-values-from-async-functions-using-async-await-from-function