收藏
回答

自己敲的代码,执行顺序存在什么错误?

getUser(e) {
        let that = this
        let flag = 0
        // 推荐使用wx.getUserProfile获取用户信息,开发者每次通过该接口获取用户个人信息均需用户确认,开发者妥善保管用户快速填写的头像昵称,避免重复弹窗
        wx.getUserProfile({
            desc: '展示用户信息'// 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
            success: (res) => {
                this.getOpenid()
                console.log(res)
                this.setData({
                    userInfo: res.userInfo,
                    tempName: res.userInfo.nickName,
                    avatarU: res.userInfo.avatarUrl,
                    gender: res.userInfo.gender,                    
                }) 
                // console.log(this.data.openidh)
            },            
        })
        //**重点问题代码段**
        if(this.data.hasOpi ==true){
            that.hasReg(flag)
            if(flag == 0){
                that.Reg()
            }else{
                wx.showToast({
                  title: '欢迎回来',
                })
            }
            this.setData({
                hasUserInfo:true
            })
        }
                //**重点问题代码段**
        return e
    }


怎么能让重点问题代码段,在获取用户openid后再执行hasReg()方法,判断这个用户是否曾经注册。(猜是代码执行顺序理解错)

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

2 个回答

  • 铅笔Naruto
    铅笔Naruto
    2022-04-29

    把你的重点代码片段放到 wx.getUserProfile这个接口的success里呢?(在success里记得把所有this换成that

    2022-04-29
    有用 2
    回复 3
    • Venom
      Venom
      2022-04-29
      嗯确实的,应该放在success里。但是不太明白为啥调用了openid()方法,hasOpi没有能被赋值
      2022-04-29
      回复
    • 那一抹笑😃 穿透阳光
      那一抹笑😃 穿透阳光
      2022-04-29回复Venom
      这个是代码执行顺序导致的
      2022-04-29
      回复
    • Venom
      Venom
      2022-04-29回复那一抹笑😃 穿透阳光
      对吧,我最初猜也是。但是确实不太了解为什么执行顺序是这个样子。如果能让代码按照  sussess(获取用户信息+获取openid())->if(判断曾经注册),那这个功能算是能跑通了  -*-
      2022-04-29
      回复
  • 那一抹笑😃 穿透阳光
    那一抹笑😃 穿透阳光
    2022-04-29

    这种写法,在用hasOpi判断的时候hasOpi肯定一直是初始值

    2022-04-29
    有用 1
    回复 6
    • Venom
      Venom
      2022-04-29
      对啊,一直是初始值,不过不太明白为啥不应该是先调用了openid()方法后,再去用执行if语句。我在openid方法里有给hasOpi赋值true
      2022-04-29
      回复
    • 那一抹笑😃 穿透阳光
      那一抹笑😃 穿透阳光
      2022-04-29回复Venom
      你这种写法本身就是有问题的,拿到的肯定是初始值,判断放在获取用户信息api里面,或者把获取用户信息写成同步方法
      2022-04-29
      回复
    • Venom
      Venom
      2022-04-29
      我的想法是,让wx.getUserProfile方法和openid()这两方法同时运行;在成功取值之后,再执行if判断语句完成登录,因为这个是用openid判断是否注册过程序
      2022-04-29
      回复
    • 那一抹笑😃 穿透阳光
      那一抹笑😃 穿透阳光
      2022-04-29回复Venom
      代码肯定是有执行顺序的嘛,写成同步方法看看,是不是你需要的
      2022-04-29
      回复
    • 那一抹笑😃 穿透阳光
      那一抹笑😃 穿透阳光
      2022-04-29回复Venom
      async getUser(e) {
              let result = await this.getUserProfile()
              console.log(result)
              console.log(this.data.openidh)
              let that = this
              let flag = 0
              //**重点问题代码段**
              if (this.data.hasOpi == true) {
                  that.hasReg(flag)
                  if (flag == 0) {
                      that.Reg()
                  } else {
                      wx.showToast({
                          title: '欢迎回来',
                      })
                  }
                  this.setData({
                      hasUserInfo: true
                  })
              }
              //**重点问题代码段**
              return e
          },
          getUserProfile() {
              let that = this;
              let resu = new Promise((resolve, reject) => {
                  wx.getUserProfile({
                      desc: '展示用户信息', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
                      success: (res) => {
                          that.getOpenid()
                          console.log(res)
                          that.setData({
                              userInfo: res.userInfo,
                              tempName: res.userInfo.nickName,
                              avatarU: res.userInfo.avatarUrl,
                              gender: res.userInfo.gender,
                          })
                          // console.log(that.data.openidh)
                          resolve(res)
                      },
                      fail(res) {
                          resolve(res)
                      }
                  })
              })
              return resu
          },
      2022-04-29
      1
      回复
    查看更多(1)
登录 后发表内容