微信小程序 app.js和首页请求先后问题解决
问题描述:解决办法一 定时器解决办法二 官方注意
·
今天菜鸟又发现了这个 app.js 和 首页请求先后的问题,但是不同的是,现在菜鸟变强了!
本来菜鸟是想补充以前写的这个问题的博客的,结果一看,发现之前写的是什么狗屎,所以直接删除了,重新写!
问题描述:
微信小程序需要在 app.js 里面去进行用户静默登录等操作,然后首页又需要根据后台返回的用户信息进行请求,那么这个时候问题就来了,可能首页的请求先于 app.js ,那么就会因为获取不到用户信息而报错!
解决办法一 定时器
解决思路:
用一个100ms的定时器去重复确认是否有用户信息,没有就继续确认,有了就清除定时器并进行请求
代码:
this.data.timer = setInterval(() => {
if(app.globalData.userInfo?.id) {
clearInterval(this.data.timer);
wx.request({
url:"xxxxx",
method:"POST",
data: {
userId: app.globalData.userInfo.id,
orgId: app.globalData.orgId,
}
}).then( res => {
if(res.status == 200){
console.log(res);
} else {
wx.showToast({
title: res.msg,
icon: 'error',
duration: 2000,
mask:true
})
}
}).catch( err => {
console.log(err);
})
}
}, 100)
注意:
1、这里还有一个变化的,就是设置一个变量,只有请求到了用户信息,再赋值为 true ,首页还是循环去判断这个变量,其实一样的!
2、记得 onHide 的时候也要清除定时器!
解决办法二 官方
解决思路:
通过 app.js 直接去调取首页的请求!具体思路就是,如果首页能获取到用户id,就直接在首页进行请求,如果获取不到,就通 app.方法名 给app里面的方法赋值成为请求,然后在登录接口的 then 中调用该方法!
代码:
app.js
wx.login({
success: res => {
let data = {
jsCode: res.code,
appId: getApp().globalData.appId,
}
wx.request({
url: 'xxxxx',
data: data,
})
.then(result => {
if (result.status == 200) {
getApp().globalData.userInfo = res.obj
this.pageFun(); // 首页方法
} else {
wx.showToast({
title: result.msg
})
}
})
}
})
首页.js
if(app.globalData.userInfo?.id) {
wx.request({
url:"xxxxx",
method:"POST",
data: {
userId: app.globalData.userInfo.id,
orgId: app.globalData.orgId,
}
}).then( res => {
if(res.status == 200){
console.log(res);
} else {
wx.showToast({
title: res.msg,
icon: 'error',
duration: 2000,
mask:true
})
}
}).catch( err => {
console.log(err);
})
} else {
app.pageFun = wx.request({
url:"xxxxx",
method:"POST",
data: {
userId: app.globalData.userInfo.id,
orgId: app.globalData.orgId,
}
}).then( res => {
if(res.status == 200){
console.log(res);
} else {
wx.showToast({
title: res.msg,
icon: 'error',
duration: 2000,
mask:true
})
}
}).catch( err => {
console.log(err);
})
}
注意
菜鸟暂时只知道这两种方法,后面有别的再来补充,这里第二种我没有写代码,现场搞的,可能有点问题,但是知道思路,相信读者不用看我的就可以自己写出来!
更多推荐
已为社区贡献1条内容
所有评论(0)