为什么axios请求的数据总是在mounted之后才发送?放在created中也没用,http请求总是在mounted之后吗?

技术问答 2023-11-17 22:22:00

求大神。如题,如果按照生命周期,应该是createDays()构造初始的模型存入dayList,this.getStatus()通过axios获取数据更改dayList中的参数,然后根据dayList初始化页面,也就是按照alert 1,2,3,4的顺序。但是事实是1,3,4,2,为什么啊?疑惑

data () {
    return {
      dayList:[]
    }
  },
created:function(){
    this.createDays();
    alert(1);
    this.getStatus();
    alert(3);
  },
mounted:function(){
    alert(4);
  },
methods: {
    createDays:function(){
    ...
    },
    getStatus:function(){
      //获取状态数据----------------------------
      this.$http.get(this.url).then(
        response =>{
          this.dayList=response.data.info;
          ...
          alert(2);
          this.setStatus();
        })
    },
    setStatus:function(){
    ...
    }
  }

你得考虑异步,并不是之后才发送请求。异步异步异步大兄弟,数据请求是异步的,要考虑很多因素。执行顺序是1,2,3,4。2最后才出来是因为你把它放在回调里了,而这又是一个异步请求。你把alert(2)放在外面试试。 如果你不太了解异步请求,可以看一下这里 你为什么想实现同步呢?同步请求会堵塞界面,后面需要执行的程序全都卡住,必须要请求完成才能执行后面的程序,请求如果花费的时间稍微久一点,这个界面基本就废了。 强烈建议不要使用同步。 如果需要请求完成才能实现某些功能,或者展示某些界面,把这些写在回调里,想要美观一点可以加个loading动画什么的异步异步异步?
声明:该文观点仅代表作者本人,必看呐发布平台,仅提供信息存储空间服务。