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

Kin*_*han 26 javascript asynchronous node.js async-await axios

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

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

它给我这个,

Promise { <pending> }
Run Code Online (Sandbox Code Playgroud)

The*_*son 26

你不能await超出async范围.为了得到预期的结果,你应该把你包装console.log成async IIFE即

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

(async () => {
  console.log(await getData())
})()
Run Code Online (Sandbox Code Playgroud)

Worked 样品.

有关的更多信息 async/await

因为axios返回一个promise,async/await可以省略getData函数,如下所示:

function getData() {
  return axios.get('https://jsonplaceholder.typicode.com/posts');
}
Run Code Online (Sandbox Code Playgroud)

然后像我们之前那样做

(async () => {
   console.log(await getData())
})()
Run Code Online (Sandbox Code Playgroud)


Pac*_*ac0 6

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

因此,您可以:

  • await该函数也可以得到结果。但是,要使用await,您需要使用async函数,因此需要“包装”一下:

    async function callAsync() {
       var x = await getData();
       console.log(x);
    }
    callAsync();
    
    Run Code Online (Sandbox Code Playgroud)

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

要么


Mei*_*hes 5

其他答案涵盖了这一罚款;但是我想讲一点,说习惯于创建和调用main函数,而不是在全局范围内运行。即

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

main().catch(console.log);
Run Code Online (Sandbox Code Playgroud)

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