我将脚趾同时浸入Axios和async / await中,并试图了解有关控制流的知识。以下内容合法吗?
let loading=true;
(async() => {
let response = null;
try {
response = await axios.get('https://whatever.com/api');
} finally {
loading=false;
}
if(response){
//do something with response here
}
})();
也就是说,我可以指望在访问响应变量时返回的请求吗?非常感谢,我可以保证可以通过在axios获取后立即将其移至“ try”中来确保它,但是随后我必须在其{final”(或“ catch”)中插入loading=false
行)。无论请求是成功还是失败,我都需要确保在任何进一步的操作之前将load设置为false,并且我不想重复自己。也许有更好的方法可以做到这一点?
答案 0 :(得分:1)
现在您已更改问题,以前的解决方案将无法正常工作。问题是IIFE内部的代码将在其他所有操作完成之后执行,因此从外部代码的角度来看,loading
永远不会设置为false
。 (其他代码将被执行,然后执行IIFE。这是因为事件循环)。最好的选择是使外部代码异步并等待axios承诺。
如果您提供问题的详细信息,我也许可以帮助您进行重构。
我需要确保在执行任何进一步操作之前将load设置为false
保证等待后的任何代码都不会加载:
(async() => {
let response = await axios.get('https://whatever.com/api');
// the request is finished, the await guarantees that
})();
如果需要错误处理,可以将其包装在try / catch中:
(async() => {
try {
let response = await axios.get('https://whatever.com/api');
// definitely not loading
}
catch (e) {
// definitely not loading, but an error occurred
}
})();