安全生产知识答题小程序app.onLaunch与page.onLoad异步
问题:
通常我们会在应用启动app.onLaunch() 去发起静默登录,同时我们需要在加载页面的时候,去调用一个需要登录态的后端 API 。由于两者都是异步,往往page.onload()调用API的时候,app.onLaunch() 内调用的静态登录过程还没有完成,从而导致请求失败。
解决方案:
通过回调函数
// on app.js
App({
onLaunch() {
login()
// 把hasLogin设置为 true
.then(() => {
this.globalData.hasLogin = true;
if (this.checkLoginReadyCallback) {
this.checkLoginReadyCallback();
}
})
// 把hasLogin设置为 false
.catch(() => {
this.globalData.hasLogin = false;
});
},
});
// on page.js
Page({
onLoad() {
if (getApp().globalData.hasLogin) { // 登录已完成
fn() // do something
} else {
getApp().checkLoginReadyCallback = () => {
fn()
}
}
},
});
⚠️注意:这个方法有一定的缺陷(如果启动页中有多个组件需要判断登录情况,就会产生多个异步回调,过程冗余)。
其实想问,关于登录的设计有没有比较好的方式。
1)登录全局化,
2)业务页面调用后当前页面自动更新
3)其他涉及数据库修改都保证在登录状态
v小程序【学法普法专题知识竞赛】