Vue中axios请求数据赋值不成功——javascript任务队列

本文详细探讨了在Vue应用中使用axios获取后端数据时遇到的问题,即数据在axios外部访问为空。分析了原因在于JavaScript的异步执行机制,特别是事件循环和任务队列的概念。作者提供了两种解决方案:一是将数据处理放在axios回调中,二是利用v-if指令延迟渲染。同时,文章还分享了深入理解异步处理和JavaScript执行机制的重要性。
摘要由CSDN通过智能技术生成

问题描述

axios向后端请求数据,在赋值时发现只有在axios中才有数据,而axios外访问数据就是空的
在created()中调用请求数据与处理数据的方法
代码:
在这里插入图片描述
前端没有数据
在这里插入图片描述

输出
在这里插入图片描述
可以从控制台输出结果看到,axios外的数据是空的


原因分析:

从上面的输出结果也能看到一些端倪,not in axios的输出顺序在 in axios之前,created中调用了请求数据与处理方法,但请求是异步执行的,在发送请求数据的后,then中的回调函数等待后端接口返回数据后才执行,而浏览器不可能一直等着,于是接着执行下面的代码,而这时的数据还是空的,所以输出的数据是空的,最终渲染的时候也是空数据


  • 2022-.3-24更新
    今天看了一点关于js事件循环、任务队列的知识,链接在这
    所以出现上面问题的原因就是:axios发送请求后,其回调函数加入了任务队列中等待主线程调用,而axios外的这个输出任务直接进入了主线程,而此时数据处理的回调函数还在任务队列中(微任务)等待主线程执行完栈中的任务后调用,所以输出的就是空的

解决方案:

方法一:如果是与处理得数据,将请求数据放在回调函数中;
如果不是马上要渲染的数据,可以在需要的时候(事件触发时)再处理。

方法二:在created中将处理数据的方法延时

	clearTimeout(this.timer);  //清除延迟执行
    this.timer = setTimeout(()=>{   //设置延迟执行
      this.getAirports();
    },2000);

  • 2022-7.21更新
    之前虽然知道了原因,但其实也是一知半解,干了也有一段时间了,对于这些东西也有了一些认识,再加上最近也在学习,所以现在回过头看,很多东西也就清晰了,同时方法二现在看来,并不好,可以对于要显示的数据在标签中使用v-if指令判断,使得当这个数据满足条件的时候再去渲染这一块的html 对于js中处理异步可以有很多方法,推荐一篇文章传送门
  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值