如何解决app.js与pages并行问题?
如何解决app.js与pages异步并行问题?
我想一打开程序就在app.js获取用户信息,然后再执行pages组件的onLoad 网上别人都说是在pages onLoad里判断,但是这也只能解决单个pages组件,我想要全部有拦截怎么处理?总不能一个一个写判断吧! 情况: 1、app.js执行获取登录态,然后再获取用户信息。 2、个别page组件会需要重新获取用户信息,比如:个人中心、购物车等.... 我现在遇到的问题: 如果用户第一次打开的是个人中心,个人中心我会重新请求用户信息,然后没有登录态再重新请求登录态,可是app.js也同时获取登录态和用户信息 ,它们两是并行的,然后都重新获取登录态,就造成了请求两次登录态,简单的程序不会有什么影响,但是程序复杂就有很难控制 请问能不能有什么办法可以在app.js控制pages所有组件的加载问题呢?
7 回复
在app.js 里面 获取openid,然后请求后端接口,后端根据openid 去判断用户信息,并返回状态。根据返回的状态前端判断处理,是否有用户信息。如果没有用户信息,弹出获取用户信息的按钮,将获取的用户信息和openid 存储。以后页面请求接口。在header里面带着openid就行,剩下就是后端处理逻辑问题了
情况:
1、app.js执行获取登录态,然后再获取用户信息。
2、个别page组件会需要重新获取用户信息,比如:个人中心、购物车等…
我现在遇到的问题:
如果用户第一次打开的是个人中心,个人中心我会重新请求用户信息,然后没有登录态再重新请求登录态,可是app.js也同时获取登录态和用户信息,它们两是并行的,然后都重新获取登录态,就造成了请求两次登录态,简单的程序不会有什么影响,但是程序复杂就有问题了
//app.js
App({
onLaunch: function() {
// 登录
wx.login({
success: res => {
var app = this;
if (res.code) {
wx.request({
url: url,
method: 'POST',
data: {
code: res.code
},
success: function(res) {
app.globalData.userkey = res.data.userkey; //登录后保存 userkey
if (app.login) { //是否有保存的事件,有就执行
app.login()
}
}
})
}
}
})
},
isLogin: function(e) {
var app = this;
if (app.globalData.userkey) { // 是否已经登录
if (e) {
e() // 已登录 直接执行事件
}
} else { // 没有登录 保存 传过来的事件
app.login = e
}
}
})
//页面js
onLoad: function(options) {
agetApp().isLogin(function() {
//事件
})
},