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

时间:2018-04-20 09:20:35

标签: javascript node.js asynchronous 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());

它给我这个,

Promise { <pending> }

3 个答案:

答案 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示例。

有关async/await

的更多信息

由于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);

对于阅读代码的人来说,这是您的应用入口点

非常清楚