欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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,用不上这个(手动微笑)。