js同步异步问题及解决方法
程序员文章站
2023-02-20 22:29:45
一、先展示一下出现了什么问题
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,用不上这个(手动微笑)。