小程序获取用户信息无法得到问题
1.前言
因为小程序是由js代码编写的,我js学得不是特别的好,所以,刚开始以为js跟java一行,一行一行的执行,后面才发现,完全不是,所以有时候,我们在获取用户信息和openId的时候,要向后台发送请求,所以有时有可能请求还没有返回数据,小程序这边已经赋值了,只能得到一个undifine,很桑心,后来js代码看多了之后,才发现有一种处理这个问题的好方法,回调,当请求得到返回信息之后,再回调,就可以得到数据了
其实微信官方文档也说明了添加一个回调函数,但是我看着这个回调函数也不知道怎么用啊,上网搜索也都是抄袭微信文档,没点新意
2.在app.js中获取用户信息
onLaunch: function () {
// 展示本地存储能力
var that = this ;
var logs = wx.getStorageSync('logs') || []
logs.unshift(Date.now())
wx.setStorageSync('logs', logs)
// 登录
wx.login({
success: res => {
// 发送 res.code 到后台换取 openId, sessionKey, unionId
var code = res.code;
var user =null;
// wechatUtil
wechatUtil.req("/user/login", { "code": code }, function (res) {
console.log("获取openId成功");
console.log(res);
if (res.resultCode == 200) {
that.globalData.user = res.resultContent;
user = res.resultContent;
// this.setData({
// user: res.resultContent
// });
// that.data.user = res.resultContent;
} else {
console.log("获取openId失败,msg:" + res);
}
// 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
// 所以此处加入 callback 以防止这种情况
if (that.userCallback) {
that.userCallback(res)
}
});
}
})
},
3.在获取openId的地方添加对回调的调用
onLoad: function () {
var that = this;
if (app.globalData.user && !JSON.stringify(app.globalData.user)){
that.setData({
user: app.globalData.user
})
}else{
app.userCallback = res =>{
console.log("----------------------------res="+res);
if(res != null){
this.setData({
user: res.resultContent
})
}
}
}
}
4.后言
小程序的坑确实挺多,但是你如果仔细阅读文档,都能解决,所以还是多读文档吧
本文作者:booleandev
本文链接:https://www.cnblogs.com/booleandev/p/18277509/the-applet-obtains-user-information-and-cannot-get-the-problem-z1lvado
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步