将异步/等待响应保存在变量上

Jon*_*a33 12 javascript ecmascript-6 es6-promise

我正在尝试使用async / await和try / catch了解异步调用。

在下面的示例中,如何将成功的响应保存到可以在其余代码中使用的变量?

const axios = require('axios');
const users = 'http://localhost:3000/users';

const asyncExample = async () =>{
    try {
        const data = await axios(users);
        console.log(data); //200
    }
    catch (err) {
        console.log(err);
    }
};

//Save response on a variable
const globalData = asyncExample(); 
console.log(globalData) //Promise { <pending> }
Run Code Online (Sandbox Code Playgroud)

Nik*_*des 20

这就是为什么要这样处理:

  • 您不能做顶层await(尽管有建议)- await必须存在于一个async函数中。

  • 将函数标记为async将导致其返回PromisePromise就像我在上面所做的那样,您可以在顶层很好地处理。

  • 但是,这不会将返回的值保存到变量中。这只是控制台记录返回的值,这不是问题所在。 (10认同)

gue*_*314 7

try..catch创建一个新的块作用域。使用let定义data之前try..catch,而不是constreturn dataasyncExample函数调用

(async() => {

  const users = 123;

  const asyncExample = async() => {
    let data;
    try {
      data = await Promise.resolve(users);
    } catch (err) {
      console.log(err);
    }
    return data;
  };

  //Save response on a variable
  const globalData = await asyncExample();
  console.log(globalData);
  // return globalData;
})();
Run Code Online (Sandbox Code Playgroud)