关于小程序onlaunch异步比page页面onload慢的问题解决办法

遇到的问题:app.js onlaunch的异步调用导致结果比page的onload的调用慢,场景:小程序在onlaunch中通过openid判断用户是否存在,但是在返回结果之前,user页面的onload先调用的全局变量。

解决办法:在onload的调用结果为空时,执行一次全局方法。

app.js

App({
	globalData:{
		userInfo:null
  	},
  	onLaunch:function(){
  		let that = this
		wx.cloud.init({
        	env: '环境ID'
      	});
      	wx.cloud.callFunction({
			name:'check_user'
		})
		.then(res=>{
			//此处给全局变量userInfo赋值
			that.globalData.userInfo = res.userInfo
			//此处为如果page的onload在onlaunch之前执行拿不到数据时,声明一个全局的方法
			if (this.userInfoCallback){
		        this.userInfoCallback(res.userInfo);
		    }
		})
		.catch(error=>{
			console.log(error)
		})
	}
})

index.js

const app = getApp()
Page({
	data:{
		userInfo:'',
		isLogin:'',
	},
	onload:function(){
		if(app.globalData.userInfo && app.globalData.userInfo!==''){
			this.setData({
				userInfo:app.globalData.userInfo
			})
		}else{
			app.userInfoCallback= (userInfo)=>{
				if(typeof userInfo === 'undefined'){
					this.setData({
						isLogin:false
					})
				}else{
					this.setData({
						userInfo:app.globalData.userInfo,
						isLogin:true
					})
				}
			}
		}
	}
})

版权声明:本文为uglyduckling0412原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。