小程序setData及其回调的执行

本文探讨了小程序中setData方法的执行特点,指出其回调会在所有setData操作完成后按顺序执行。这种机制有助于解决因多个setData调用导致的时序问题,确保在回调中访问到的变量是最新的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

小程序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已经改好,不用考虑监听函数时序的问题了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值