收藏
回答

页面方法内部调用云函数和方法体内的代码执行顺序问题?

/**
 * 获取用户信息
 * @param {*} event 
 */
  onGetUserInfo: function(event){
    let that = this
    let rawData = JSON.parse(event.detail.rawData)
    wx.cloud.callFunction({
      name: "login",
      success: res => {
        that.setData({
          openid: res.result.openid,
          userinfo: event.detail.userInfo
        })
        that.data.userinfo.openid = that.data.openid //userinfo 保存openid信息
        console.log("data openid: ", that.data.userinfo.openid)
      },
      fail: res => {
        console.log(res.result)
      }
    })
    that.data.userinfo.openid = that.data.openid //userinfo 保存openid信息
    that.data.userinfo.headImg = rawData.avatarUrl //userinfo 保存头像地址信息
    console.log("data: ", that.data.userinfo.openid)
    console.log("data all: ", that.data)
    wx.setStorageSync('userinfo', that.data.userinfo)
  }

为什么后面的两个console比云函数回调success中的console先执行。


回答关注问题邀请回答
收藏

1 个回答

  • 刘富棍儿
    刘富棍儿
    2021-08-08

    先要搞清什么是同步什么是异步

    云函数是异步的,当然先执行下面的了

    用异步函数的时候数据在回调里面处理就行了

    2021-08-08
    有用 1
    回复 4
    • 丨
      2021-08-08
      2021-08-08
      回复
    • 刘富棍儿
      刘富棍儿
      2021-08-08回复
      页面渲染必须用setdata赋值,你直接that.data.userinfo.headImg = rawData.avatarUrl这样是不会渲染的
      你应该先把headimg加到userinfo里面,然后再setdata,这样视图才能获取到数据
      2021-08-08
      1
      回复
    • 丨
      发表于移动端
      2021-08-08回复刘富棍儿
      “ 页面渲染必须用setdata赋值”,学习了,多谢原谅我这新手,太多规则不懂了,看来还是要好好研究一下原理
      2021-08-08
      回复
    • 刘富棍儿
      刘富棍儿
      2021-08-08回复
      多看看文档,我刚开始也是各种百度还有提问
      2021-08-08
      回复
登录 后发表内容