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
从asyncExample函数中返回一些东西
const asyncExample = async () => {
return await axios(users)
};
Run Code Online (Sandbox Code Playgroud)调用该函数并处理其返回的内容Promise:
asyncExample().then(users => {
console.log(users)
})
.catch(err => console.error(err))
Run Code Online (Sandbox Code Playgroud)这就是为什么要这样处理:
您不能做顶层await(尽管有建议)- await必须存在于一个async函数中。
将函数标记为async将导致其返回Promise。Promise就像我在上面所做的那样,您可以在顶层很好地处理。
try..catch创建一个新的块作用域。使用let定义data之前try..catch,而不是const,return data从asyncExample函数调用
(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)