评论

安全生产知识答题小程序app.onLaunch与page.onLoad异步

安全生产知识答题小程序app.onLaunch与page.onLoad异步

安全生产知识答题小程序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()
            }
      }
    },
});

⚠️注意:这个方法有一定的缺陷(如果启动页中有多个组件需要判断登录情况,就会产生多个异步回调,过程冗余)。


点赞 0
收藏
评论

2 个评论

登录 后发表内容