js同步异步问题及解决方法
程序员文章站
2022-05-17 15:33:42
一、先展示一下出现了什么问题
callback:function(list){
list.append('a');
} //callback函...
一、先展示一下出现了什么问题
callback:function(list){ list.append('a'); } //callback函数 a:function{ var list=[]; for(var i=0;i<n;i++){ b:function(callback){ callback(list); console.log(list); //这里可以获得每次加了a之后的结果 } } console.log(list); //这里输出的是[] } //这一小段代码是个简单的说明,可能存在纰漏,欢迎指出~
值得思考的是,为什么在for循环外,想要输出list的时候,输出的是[ ],根本没有append嘛摔!
二、为什么出现这个问题?
这是因为啊,b里的callback是回调函数,回调默认是异步的。整个程序在执行时呢,是分同步和异步两大块,先执行同步的,再执行异步的。也就是说,先执行了后一句console.log(list);再执行callback,所以当然是[ ]的咯。
三、怎么解决问题?
有几种方式
1. .ajaxsettings.async=false;//锁住,以下程序同步执行.ajaxsettings.async=false;//锁住,以下程序同步执行.ajaxsettings.async = true; //解锁,以下程序异步执行
当数据量小的时候可以这样做,当数据量大的时候用户体验会很差,因为这个是这样是锁住在等拿到数据。
2.用setinterval定时器。你不是要等等才能拿到结果吗?那我就循环检查,看你什么时候拿到结果(傲娇)
3.用promise。这个是比较新的做法,我所在的项目组还才支持ie6,用不上这个(手动微笑)。
上一篇: ASP 3.0高级编程(十三)
下一篇: 完结篇
推荐阅读
-
使用vue-router与v-if实现tab切换遇到的问题及解决方法
-
无线网卡不被系统识别的N种问题及解决方法
-
appium运行各种坑爹报错问题及解决方法【推荐】
-
暴风影音播放视频时字幕不同步的原因及解决方法
-
详解打开网页js报错问题的多种解决方法
-
Hive与Oracle之间利用Sqoop进行数据的导入导出时遇到的问题及解决方法
-
spring定时任务执行两次及tomcat部署缓慢问题的解决方法
-
JavaScript实现微信红包算法及问题解决方法
-
打开IE浏览器提示"浏览器不支持js,导致部分功能缺失"的故障原因及解决方法
-
Android中ListView异步加载图片错位、重复、闪烁问题分析及解决方案