js_同步异步

问题背景:上一篇博客说到回调函数,回调函数往往容易带来同步异步的问题。我收集到了几种解决办法,总结一下。


一、先展示一下出现了什么问题

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;// . a j a x S e t t i n g s . a s y n c = f a l s e ; / / 锁 住 , 以 下 程 序 同 步 执 行 .ajaxSettings.async = true; //解锁,以下程序异步执行
当数据量小的时候可以这样做,当数据量大的时候用户体验会很差,因为这个是这样是锁住在等拿到数据。

2.用setInterval定时器。你不是要等等才能拿到结果吗?那我就循环检查,看你什么时候拿到结果(傲娇)

3.用promise。这个是比较新的做法,我所在的项目组还才支持IE6,用不上这个(手动微笑)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值