微信小程序之setData是异步执行的吗

先回答问题,根据小程序的文档说明 [1],答案分两部分:

  1. setData在逻辑层的操作是同步,因此this.data中的相关数据会立即更新;
  2. setData在视图层的操作是异步,因此页面渲染可能并不会立即发生。

之所以后者是异步,主要是考虑到将数据从逻辑层发送到视图层的过程中相比直接在逻辑层内操作会花费更多时间也会有更多不确定,于是为保证前端用户体验与减少系统开销,就索性异步了。

但是setData的设计也考虑到有些代码需要在确定setData引起的页面渲染完成后才执行,因此setData其实是有预留渲染完毕后的回调函数的:Page.prototype.setData(Object data, Function callback)

比如下面这个代码片段,就是渲染完毕后才弹出提示对话框,以保证用户体验一致 [2]:

self.setData({
        "leader.name": "jack.ma"
    },
    function() {
        wx.showToast({
            title: "团队leader已经更改为:"+self.data.leader.name,
            icon: "none"
        })
    }
)

参考资料

[1] Page.prototype.setData(Object data, Function callback)
[2] 微信小程序开发——setData的使用技巧

你可能感兴趣的:(微信小程序之setData是异步执行的吗)