问题描述:

//app.js
App({
globalData:{
nickname:''
},
onLaunch: function () {
let that=this;
//假设已经授权成功
wx.getUserInfo({
success(res){
//获取用户信息并赋值给globalData
that.globalData.nickname=res.userInfo.nickName;
}
}) }
}) //index.js
const app = getApp()
Page({
data: {
myNickName:''
},
onLoad: function (option) {
console.log(app.globalData.nickname); //结果:""
this.setData({
myNickName:app.globalData.nickname
})
//由于wx.getUserInfo()是异步请求,不知道什么时候成功返回数据,导致获取失败
}
})

时序图描述:

解决方案

//app.js
App({
globalData:{
nickname:''
},
onLaunch: function () {
let that=this;
//假设已经授权成功
wx.getUserInfo({
success(res) {
let tmp=res; setTimeout(()=>{//更清楚的模拟异步环境,设置5秒后执行代码
//获取用户信息并赋值给globalData
that.globalData.nickname = res.userInfo.nickName;
if (that.userInfoReadyCallback) {
console.log('call back')
that.userInfoReadyCallback(res.userInfo.nickName)
}
},5000) }
}) }
}) //index.js
const app = getApp()
Page({
data: {
myNickName:''
},
onLoad: function (option) {
let that = this;
let mynickname = app.globalData.nickname;
//如果app.onLaunch中的wx.getUserInfo()返回够快
//在app.onLoad之前就已经初始化了app.globalData.nickname则直接更新本界面的this.data.nickname
if(mynickname.length){
this.setData({
nickname:mynickname
})
//定义回调函数,一旦app.onLaunch的wx.getUserInfo获取到用户信息的时候,立即运行该回调函数
}else{
app.userInfoReadyCallback=res=>{
this.setData({
nickname:res
})
}
}
}
})

解决方案时序图:

总结

1.巧用回调函数

参考:https://blog.csdn.net/zjw_python/article/details/80641963

小程序app.onLaunch中获取用户信息,index.onLoad初次载入时取不到值的问题的更多相关文章

  1. 微信小程序~App.js中获取用户信息

    (1)代码:主要介绍下获取用户信息部分 onLaunch: function () { // 展示本地存储能力 var logs = wx.getStorageSync('logs') || [] l ...

  2. 微信小程序-form表单-获取用户输入文本框的值

    微信小程序-form表单-获取用户输入文本框的值 <input name='formnickname' class="textarea" placeholder=" ...

  3. 微信小程序在组件中获取界面上的节点信息wx.createSelectorQuery

    节点信息查询 API 可以用于获取节点属性.样式.在界面上的位置等信息. 最常见的用法是使用这个接口来查询某个节点的当前位置,以及界面的滚动位置. 示例代码: const query = wx.cre ...

  4. 明令禁止下,哪些APP在违规获取用户信息?

    2019年4月28日消息  移动互联网时代各大APP大行其道,用户为了更便捷地享受互联网服务,常常需要让渡部分个人信息.在信息获取不透明的情况下,不少APP运营企业出现过度获取乃至违规获取用户信息的情 ...

  5. 微信小程序app.js中设置公有变量

    初始化GlobalData 在App.js的最上方可以设置GlobalData的初始值. App({ globalData:{ appid: '1wqas2342dasaqwe232342xxxxxx ...

  6. 小程序使用wx.chooseAddress获取用户手机号码,微信chooseAddress接口获取用户收货信息

    通常用户在商城购买产品后,需要填写他的收货信息,方便我们发货,但是在手机上写字非常不方便,一个客户的收货信息包括:姓名,地址和手机号码这些内容全部填写的话,至少要写20个字. 地址 所以有些客户在手机 ...

  7. 微信小程序~App.js中登录

    (1)初始化项目中App.js登录代码 // 登录 wx.login({ success: res => { // 发送 res.code 到后台换取 openId, sessionKey, u ...

  8. 微信小程序---app.json中设置背景色不生效解决办法

    按照官方文档的说明,backgroundColor应该可以设置窗口的背景色. "window":{ "backgroundTextStyle":"li ...

  9. uniapp 在h5和小程序上使用高德获取用户城市位置

    开发文档 https://lbs.amap.com/api 错误状态 https://lbs.amap.com/api/webservice/guide/tools/info/ 虽然用的高德但是你还需 ...

随机推荐

  1. 执行python文件

    方法一: 通过控制台程序,一行一行执行python程序,输一行执行一行 方法二: 将程序用编辑器编辑好,再在控制台中用路径打开一次性执行(前提是py程序的默认打开方式是python解释器)

  2. kai linux安装搜狗输入法以及更新源地址

    需要去搜狗官网下载linux版的输入法,根据自己的系统选择多少位进行下载. 首先执行如下命令:dpkg -i 输入法包名,这时会报错,会报没有安装依赖包,这时需要执行apt-get install - ...

  3. maven配置及IDEA配置maven环境

    一. maven的下载及配置 1. maven下载地址 可以在网址:https://maven.apache.org/download.cgi下载最新版本的maven 2. maven文件解压缩 解压 ...

  4. ueditor接入秀米编辑器

    秀米编辑器用来编辑微信页面很方便,功能也比较强大.秀米提供了第三方编辑器接入的功能,接入方法可以参照官网示例:http://hgs.xiumi.us/uedit/ 但是这里有几点要注意: 1. 示例中 ...

  5. Django 2.0 官方文档翻译

    from django.contrib import admin from django.urls import include, path urlpatterns = [ path('polls/' ...

  6. hihocoder 1175

    拓扑排序 hihocoder 1175 拓扑只适用于 有向无环图中,这个指的是 1.有向的,不是那种双向可走的 2.无环,并不是不存在环,而是一定要有一个没有其他点指向这个点的点, 题目大意:一个有向 ...

  7. Gitlab_ansible_jenkins三剑客⑤jenkins Pipeline-job的使用

    Pipeline-job的使用 创建Pipeline任务 找到root用户的id 编写pipeline脚本 #!groovy pipeline{ agent {node {label 'master' ...

  8. WebApi-2 自定义路由与默认路由

    向Web API添加路由 public static void Register(HttpConfiguration config) { //// Web API 配置和服务 //// 将 Web A ...

  9. Oracle 数据库监听无法连接上、监听HANG住、监听无响应、TNS-12560

    环境: Windows server 2003 Oracle 11.2.0.1 问题: 一套老数据库在运行了很久后,突然就连接不上了,提示监听异常. 处理: 1.CMD命令行检查监听状态:无监听 2. ...

  10. js数据结构与算法——队列

    <script> //创建一个队列 function Queue(){ let items = []; //向队尾添加一个新的项 this.enqueue = function(eleme ...