虽然app.js先于index.js。但是修改app.js中的全局变量是异步请求,如果你想在index.js里获取app.js修改后的值,那么需要使用promise来实现异步。
小程序默认项目自带了一种获取授权头像的信息了
promise实现异步操作同步显示流程
app.js
//app.js
App({//获取授权的头像信息 检测授权getUserInfo() {return new Promise((resolve, reject) => {// 获取用户信息wx.getSetting({success: res => {if (res.authSetting['scope.userInfo']) {wx.getUserInfo({success: res => {// 可以将 res 发送给后台解码出 unionIdthis.globalData.userInfo = res.userInforesolve(this.globalData.userInfo); // 这里是关键}})}else{//之前没有授权信息头像reject(this.globalData.userInfo)wx.redirectTo({url: '/pages/about/about'})console.log("未授权");}}})})},globalData: {userInfo: null}
})
index.html
<!--index.wxml-->
<view class="container"><view class="userinfo"><button wx:if="{{!hasUserInfo}}" open-type="getUserInfo" bindgetuserinfo="getUserInfo"> 获取头像昵称 </button><block wx:else><image class="userinfo-avatar" src="{{userInfo.avatarUrl}}" mode="cover"></image><text class="userinfo-nickname">{{userInfo.nickName}}</text></block></view>
</view>
index.js
//index.js
//获取应用实例
const app = getApp()
Page({data: {userInfo: {},hasUserInfo: false,},onLoad: function () {//检测授权信息app.getUserInfo().then(res=>{console.log(res);this.setData({hasUserInfo:true,userInfo:res})})},getUserInfo: function(e) {console.log(e)app.globalData.userInfo = e.detail.userInfothis.setData({userInfo: e.detail.userInfo,hasUserInfo: true})}
})