收藏
回答

setData赋值不成功?

我通过云函数获取到openId后,通过OpenId获取到了用户的姓名和性别,但是用setData给index的变量赋值时,不成功,请教各位大师,这是什么原因?代码如下:

    wx.cloud.init()

    wx.cloud.callFunction({

      name: 'test',

      complete: res => {

         let open_id=res.result.userInfo.openId

console.log("open_id",open_id);

const db = wx.cloud.database()

db.collection('UserInfo').where({

  OpenId: open_id

  })

.get({

  success: function (res) {

    console.log("自己通过openid取得的信息",res.data);

    if (res.data[0].sex == '1') {

      this.setData({

        sexC: "先生1"

      })

    } else {

      this.setData({

        sexC: "女士"

      })

    }

   

    this.setData({

      UserName: res.data[0].UserName,

      UserType: res.data[0].UserType,

      UserInfo: res.data[0]

    })

    //return res

  },

  fail: err => {

     reject(err)

  }

})

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

3 个回答

  • 正青春
    正青春
    2023-12-15

    你每次在方法下边第一行,声明一下 var that = this;如果方法里还有方法,依次类推,声明的变量名不要重复。

    2023-12-15
    有用
    回复
  • 那一抹笑😃 穿透阳光
    那一抹笑😃 穿透阳光
    2023-12-15

    在方法开头定义 let that = this; 然后里面使用that,这个数指向问题

    2023-12-15
    有用
    回复
  • 〆
    2023-12-15

    控制台是否有报错

    2023-12-15
    有用
    回复 5
    • ljh
      ljh
      发表于移动端
      2023-12-15
      控制台没有错
      2023-12-15
      回复
    • 〆
      2023-12-15回复ljh
      可以先尝试一下在方法的第一行加上const _this = this; 下方代码都使用_this去调用,如果还是不行,请将setData参数定义部分,与赋值不成功的判断依据截图或者描述一下;因为目前根据你贴出的代码无法清晰判断问题具体出现在哪;
      2023-12-15
      回复
    • 〆
      2023-12-15回复ljh
      如图
      2023-12-15
      回复
    • ljh
      ljh
      2023-12-15回复
      感谢回答,根据您的指点,确实好了,是什么原因呢?可否解释一下?
      2023-12-15
      回复
    • 余生
      余生
      2023-12-15回复ljh
      在JavaScript中,this 关键字的值是由函数调用的方式决定的。在小程序中,异步回调函数(如网络请求的 success 回调)可能会导致 this 的上下文发生变化,因为异步函数的执行环境与定义它的函数不同。
      使用 const _this= this; 的方式是为了在回调函数中访问外部函数的 this,因为在箭头函数或通过 const _this= this; 缓存的方式下,_this会捕获到正确的 this 上下文。
      2023-12-15
      3
      回复
登录 后发表内容