// 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(() => api.getEntitlements()) .then((list) => store.setEntitlements(list)) .catch((err) => console.warn('[app] 登录或权益加载失败', err)), ]; return Promise.all(tasks); }, /** 页面调用它确保初始化完成。 */ ready() { return this.globalData.ready || Promise.resolve(); }, });