wx.login与wx.getUserProfile不能同时用问题

微信小程的坑!

调用wx.login获取code后,再调用wx.getUserProfile,可能会失败,触发fail函数

上代码

noPwdLogin: function () {
    //1 获取code
    let code='';
    wx.login({
      success(res) {
        code=res.code;
      }
    });

    //2 获取用户信息
    wx.getUserProfile({
      desc: '用户登录', 
      success: (res) => {
        //.userInfo.nickName
        wx.request({
          url: app.globalData.baseUrl+'user/wxLogin',
       data:{
        "code":code,
        "nickName":res.userInfo.nickName
       },
       success:function (suc) {
         console.log(suc.data)
       },
       fail:function (err) {
         console.log("请求失败!");
       }
      })

      },
      fail: (err) => {
        console.log("已拒绝小程序获取信息");
      }
    })
  },

这个方法是解决问题的

先执行login和getUserProfile方法,因为getUserProfile方法需要用户点击确认后才能获取到用户信息,这时候login方法已经执行完毕了,所以不需要考虑异步回调的问题

还有一个 Promise.all 平级调用方法,目前个人测试是失败,不知道你们有什么办法改进呢

 /**获取用户信息昵称和头像 */
  getUserInfo: function () {
    return new Promise((resolve, reject) => {
      wx.getUserProfile({
        desc: '用户登录', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
        success: (res) => {
          resolve(res)
        },
        fail: (err) => {
          reject(err)
        }
      })
    })
  },

  /**获取用户openid */
 getLogin: function () {
    return new Promise((resolve, reject) => {
      wx.login({
        success(res) {
          resolve(res)
        },
        fail: (err) => {
          reject(err)
        }
      })
    })
  },

调用

/*微信登录*/
  wxLogin: function () {
    const ui = wx.getStorageSync("userInfo");
    if (ui=="") {//不存在
      //1缓存已清除 2无注册
      //需要获取获取openid 和用户信息
      let userRes = this.getUserInfo()
      let loginRes = this.getLogin()
       //使用promise.all()平级调用
    Promise.all([loginRes,userRes]).then((res) => {
      let avatarUrl=res[1].userInfo.avatarUrl//头像
      let nickName=res[1].userInfo.nickName;//昵称
      let code=res[0].code;//解析码

       wx.request({
        url: app.globalData.baseUrl+'user/wxLogin',
        data:{
          "code":code,
          "nickName":nickName
        },
        method:"POST",
        success:function (res) {
          console.log(res);
          console.log(code)
        },
        fail:function(err) {
          console.log("请求失败")
        }
       })
    }).catch((err)=>{
      console.log("请求错误")
    })

    }else{
      //去判断token有没有过期,过期就加载一下
      console.log("不空");
    }
  },
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值