小程序onload 和 onshow是异步,但我每个页面都有获取用户的登录信息而调用接口进行操作,获取用户登录信息这步可能涉及到调用接口,如果我写在onload上,可能会导致onshow调用接口的方法还没来得及获取到用户信息就执行了,如果我把逻辑都写在onload上,后退到页面还要有部分数据要刷新状态,我又不想把逻辑全部写在onshow,这样每次后退都重新调取了数据,请问大家有什么好的见解呢
onLoad: function(options) {
authorize.checkAuth(function() {
//业务逻辑
//请求一些一次性加载的接口
})
},
onShow:function(){
//每次进来或者后退都要在确保有用户登录状态情况下请求状态数据
this.getStatus()
}
在data中设置一个flag变量为false, onShow 请求数据的判断条件为true;onLoad中获取完信息后改变flag状态。这样的话,onShow方法就不会早早的跑在onLoad前面啦~
flag: false,
onShow(){
//wait for 2 seconds
//set flag = true
},
onLoad(){
//if flag === true, log("hello")
}
设置变量,初始值为false,onload中调用登录,回调中调后续方法。onhide中变量值改true,onshow中判断状态为true调用后续方法,这样避免登录,还能保证数据刷新
我也遇到了这个问题
设置一个全局变量,在返回到此页面时给全局变量设置个状态,离开页面时清除状态。这样在onshow中判断全局变量存在状态值时执行。
该首次加载的写onLoad,需要即时刷新的在onShow里面加this.onLoad()
登陆后把登陆状态放全局变量里,调用接口时候先判断全局有没有,有就可以直接获取状态了,没有再给提示让他登录。如果不想后退都再调所有接口,那就放onLoad里,再onshow时候再单独把做更改的那个属性做更改。
写在onShow中,登陆后缓存登陆状态,下次执行onShow时,判断一下登陆状态