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

导读:本篇文章讲解 wx.login与wx.getUserProfile不能同时用问题,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

微信小程的坑!

调用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("不空");
    }
  },

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/107110.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!