小程序获取用户信息无法得到问题

本贴最后更新于 2312 天前,其中的信息可能已经时移世改

小程序获取用户信息无法得到问题

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.后言

小程序的坑确实挺多,但是你如果仔细阅读文档,都能解决,所以还是多读文档吧

  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1063 引用 • 3455 回帖 • 161 关注
  • 小程序
    78 引用 • 221 回帖 • 2 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...