报错:为什么数组明明有内容但打印的length是0

文章目录

一、问题

在日常开发中,for 循环遍历调用接口,并将接口返回的值进行拼接,即push到一个新的数组中,但是在for循环内部是可以拿到这个新的数组,而for循环外这个新的数组时空,打印的长度也是0

二、分析

因为我们拼接的数据是从接口请求的,而接口请求发送的ajax请求是异步的,因此遇到这种情况,基本上都是一点,你的数组数据来源是异步请求产生的(例如 ajax/axios ),就比如你在ajax的success回调中没有直接使用这个数据,而是赋予了一个全局变量,你此时在ajax的下方打印这个全局变量,便会出现上面的数组有值而长度为0的状况
如此现象呢就是因为你的异步请求还在请求过程中,但是你的代码已经走到了打印那一行,全局变量是个空数组没赋值,我们打印的是这个变量的引用地址,异步赋值之后,因为是地址引用,那个数组已经被修改了。那个时候的数组长度确实还是0。但这个数组包含修改后的数据。

三、解决

1.将异步改为同步

js 复制代码
//利用 async和await
async function(){
      await axios.post('') 
    }
js 复制代码
$.ajax({
	url: '',
	data: {},
	dataType: 'json',
	async:true,//同步属性设置为true 
	type: 'post',
	success: function(obj) {

	}
})

2.设置延迟

js 复制代码
setTimeout(() => {
		//代码
	}, 1000);  //1秒后执行代码
相关推荐
用户69371750013845 分钟前
Android 开发,别只钻技术一亩三分地,也该学点“广度”了
android·前端·后端
唔6612 分钟前
原生 Android(Kotlin)仅串口「继承架构」完整案例二
android·开发语言·kotlin
一直都在57224 分钟前
MySQL索引优化
android·数据库·mysql
代码s贝多芬的音符2 小时前
android mlkit 实现仰卧起坐和俯卧撑识别
android
jwn9992 小时前
Laravel9.x核心特性全解析
android
今天又在写代码3 小时前
数据智能分析平台部署服务器
android·服务器·adb
梦里花开知多少4 小时前
深入谈谈Launcher的启动流程
android·架构
jwn9994 小时前
Laravel11.x新特性全解析
android·开发语言·php·laravel
我就是马云飞5 小时前
停更5年后,我为什么重新开始写技术内容了
android·前端·程序员
stevenzqzq5 小时前
Kotlin 协程:withContext 与 async 核心区别与使用场景
android·开发语言·kotlin