如何从异步函数返回值? 我试着喜欢这个
const axios = require('axios');
async function getData() {
const data = await axios.get('https://jsonplaceholder.typicode.com/posts');
return data;
}
console.log(getData());
它给我这个,
Promise { <pending> }
答案 0 :(得分:18)
你不能await
async
范围以外的东西。要获得预期的结果,您应该将console.log
包装成异步IIFE,即
async function getData() {
return await axios.get('https://jsonplaceholder.typicode.com/posts');
}
(async () => {
console.log(await getData())
})()
Worked
示例。
由于axios
会返回一个承诺,async/await
函数可以省略getData
,如下所示:
function getData() {
return axios.get('https://jsonplaceholder.typicode.com/posts');
}
然后像我们之前那样做
(async () => {
console.log(await getData())
})()
答案 1 :(得分:5)
你的函数getData将返回一个Promise。
所以你可以:
await
该函数也可以获得结果。但是,为了能够使用await
,您需要使用async
函数,因此您需要“包装”这个:
async function callAsync() {
var x = await getData();
console.log(x);
}
callAsync();
(为了清楚起见,我将该函数命名为,但在这种情况下,我宁愿使用匿名函数调用;请参阅TheReason的answer。)
或
将结果用作普通的Promise,这是异步函数返回的内容
您必须使用then
进行回调:
getData().then(x => {
console.log(x);
}
答案 2 :(得分:3)
其他答案已涵盖此罚款;但是我想插入并说要养成创建和调用main
函数的习惯,而不是在全局范围内运行。即
async main(){
let result = await getData();
}
main().catch(console.log);
对于阅读代码的人来说,这是您的应用入口点
非常清楚