Axios异步/等待流

时间:2020-09-23 10:33:14

标签: async-await axios

我将脚趾同时浸入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,并且我不想重复自己。也许有更好的方法可以做到这一点?

1 个答案:

答案 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
  }
})();