小程序setData及其回调的执行*
setData后执行的回调中打印set的变量,发现变量不是赋值后的变量
```javascript
that.setData({
isplay: resData.isPlaying,
}, () => {
that.myconsole(`isPlay=${that.data.isplay}`) //false
that.myconsole(`isPlay=${resData.isPlaying}`)//true
});
代码中两个打印结果不一样
思索其原因。。。打印了所有的isPlay
发现,setData的回调不是set后立即执行的,是等待所有setData方法全部执行完毕才执行的,另一个setData执行时改了isPlay的值。
*写了demo验证*
```javascript
that.setData({
demoOne:1
},()=> {
console.log('我是one'+that.data.demoOne+'+'+that.data.demoTwo+'+'+that.data.demoThree+'+'+that.data.demoFour) //我是one0+0+0+4
})
that.setData({
demoOne:0,
demoTwo:2
},()=> {
console.log('我是two'+that.data.demoOne+'+'+that.data.demoTwo+'+'+that.data.demoThree+'+'+that.data.demoFour) //我是two0+0+0+4
})
that.setData({
demoOne:0,
demoTwo:0,
demoThree:3
},()=> {
console.log('我是three'+that.data.demoOne+'+'+that.data.demoTwo+'+'+that.data.demoThree+'+'+that.data.demoFour) //我是three0+0+0+4
})
that.setData({
demoOne:0,
demoTwo:0,
demoThree:0,
demoFour:4
},()=> {
console.log('我是four'+that.data.demoOne+'+'+that.data.demoTwo+'+'+that.data.demoThree+'+'+that.data.demoFour) //我是four0+0+0+4
})
由此发现setData的回调是等待全部setdata执行结束后按顺序执行的
这恰好解决了我一个bug,某个场景有监听函数都执行了,调到了两个set的方法,第一个被调用的set中有回调执行,执行时第二个被调用的set已经改好,不用考虑监听函数时序的问题了