微信小程的坑!
调用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