提问者:小点点

如何使用async-await from函数从异步函数返回值?[副本]


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

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个答案

匿名用户

您不能等待async作用域之外的内容。要获得预期的结果,您应该将console.log包装到异步生命中,即

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

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

工作示例。

有关async/await的详细信息

由于axios返回一个承诺,因此可以省略getdata函数的async/await,如下所示:

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

然后就像我们以前做的一样

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

匿名用户

函数getData将返回一个承诺。

因此您可以:

>

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

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

    (为了清楚起见,我命名了该函数,但在此场景中,人们宁愿使用匿名函数调用;请参阅Thereason的答案。)

    >

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

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

  • 匿名用户

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

    async main(){
      let result = await getData();
    }
    
    main().catch(console.log);
    

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

    相关问题