如何使用函数的 async-await 从异步函数返回值?

IT技术 javascript node.js asynchronous async-await axios
2021-01-20 12:20:22

如何从异步函数返回值?我试着喜欢这个

const axios = require('axios');
async function getData() {
    const data = await axios.get('https://jsonplaceholder.typicode.com/posts');
    return data;
}
console.log(getData());

它返回给我这个,

Promise { <pending> }
3个回答

你不能await做一些超出async范围的事情要获得预期的结果,您应该将您的内容包装console.log到异步 IIFE 中,即

async function getData() {
  return await axios.get('https://jsonplaceholder.typicode.com/posts');
}

(async () => {
  console.log(await getData())
})()

Working 样本。

有关的更多信息 async/await

由于axios返回一个Promise,async/await因此可以getData像这样省略函数:

function getData() {
  return axios.get('https://jsonplaceholder.typicode.com/posts');
}

然后像我们以前一样做

(async () => {
   console.log(await getData())
})()
但如果需要,您可以改用另一个“命名”函数。
2021-03-29 12:20:22
(async () => { console.log(await getData()) })() 这里发生了什么?
2021-04-01 12:20:22
您是否正在运行匿名异步函数。对?
2021-04-06 12:20:22

您的函数 getData 将返回一个 Promise。

所以你可以:

  • await函数也可以得到结果。但是,为了能够使用await,您需要在一个async函数中,因此您需要“包装”这个:

    async function callAsync() {
       var x = await getData();
       console.log(x);
    }
    callAsync();
    

    (为了清楚起见,我命名了该函数,但在这种情况下,人们宁愿使用匿名函数调用;请参阅 TheReason 的回答。)

或者

  • 将结果用作正常的 Promise,这是异步函数返回的结果。
    您必须使用then回调:

    getData().then(x => { 
        console.log(x); 
    });
    

其他答案已经涵盖了这个罚款;但我想说的是养成创建和调用main函数的习惯,而不是在全局范围内运行。IE

async function main(){
  let result = await getData();
}

main().catch(console.log);

任何阅读您代码的人都非常清楚这是您的应用程序入口点