50 lines
1.5 KiB
JavaScript
50 lines
1.5 KiB
JavaScript
// app.js
|
|
const api = require('./utils/api');
|
|
const store = require('./utils/store');
|
|
|
|
App({
|
|
globalData: {
|
|
/** 初始化完成的 Promise,页面 onLoad 里等它即可,避免首屏读不到数据 */
|
|
ready: null,
|
|
},
|
|
|
|
onLaunch() {
|
|
this.globalData.ready = this.bootstrap();
|
|
},
|
|
|
|
/**
|
|
* 启动流程:配置再静默登录,最后拉已购课程。
|
|
*
|
|
* 每一步失败都不阻断启动:配置缺失时页面按空值渲染,登录失败时按未登录渲染。
|
|
* 旧版本在页面 data 里同步读缓存、而缓存由异步写入,首次安装必然报错,这里不再重蹈。
|
|
*/
|
|
bootstrap() {
|
|
const tasks = [
|
|
api
|
|
.getConfig()
|
|
.then((cfg) => store.setSiteConfig(cfg))
|
|
.catch((err) => console.warn('[app] 配置加载失败', err)),
|
|
|
|
api
|
|
.login()
|
|
.then((res) => {
|
|
// 静默登录只建立身份。用户从没主动登录过、或者已经退出,就不去拉已购课程,
|
|
// 否则知识页会在「未登录」状态下又冒出课程列表。
|
|
if (!res || !res.user || res.user.isLogin !== 1) {
|
|
store.setEntitlements([]);
|
|
return null;
|
|
}
|
|
return api.getEntitlements().then((list) => store.setEntitlements(list));
|
|
})
|
|
.catch((err) => console.warn('[app] 登录或权益加载失败', err)),
|
|
];
|
|
return Promise.all(tasks);
|
|
},
|
|
|
|
/** 页面调用它确保初始化完成。 */
|
|
ready() {
|
|
return this.globalData.ready || Promise.resolve();
|
|
},
|
|
});
|
|
|