异步回调处理

之前异步回调总是出现问题,先上一段错误的代码

1
2
3
4
5
6
callbacking = false
if(!this.callbacking) {
this.callbacking = true
this.callback()
this.callbacking = false
}

这段代码会走this.callbacking = false但是没有意义,如果callback是同步的,这个if在callback执行期间不再会走第二次,如果是异步的,这样写是不对的。我的callback是异步的。。所以这样写的效果是这样的

1
2
3
this.callbacking = true
this.callback() //发起异步请求后callback函数结束(请求未完成)
this.callbacking = false

也就是说,callbacking在异步请求没有结束的时候就已经回归到false了,无法起到想要的作用。应该这样写:

1
2
3
4
this.callbacking = true
this.callback(()=>{
this.callbacking = false
})

callback接受的函数需要在异步完成后执行。这样才能保证指定代码在异步操作完成后才执行,比如说在this.callbacking = true上锁后,是希望在异步操作结束后才解锁。

或者使用promise,在.then().then解决