产品口径:上游有档案且有预产期时,页面应按 ①身份(openid/unionid/phone) → ②用户资料
(box_app /profile,会从上游同步预产期/小名/宝宝名)→ ③应用数据(今日足迹等)这个顺序加载。
- applyRemoteProfile() 改为**返回 Promise**(访客分支与已跑过也返回已决议的 Promise),
init() 里改为 `Promise.race([applyRemoteProfile(), 10s 超时]).then(() => { 应用数据 })`:
显式等 ② 落地再取 ③(资料库/记录/内容、今日脚印、首页工具卡、来信未读)。
⚠️ 加兜底超时的原因:② 万一挂住(上游不响应),③ 也必须照常发出,别让首页空等。
⚠️ 原来这五个 fetch 一起发、谁先回来谁写 DOM —— 竞态都是这么来的(今日脚印整块显隐被
profile 回来后又翻回去;来信提示的红点与卡各写一份判据)。顺序化后两者都收敛。
为什么这条重要(与今日脚印的显隐口径直接相关):上游有预产期时,第 ② 步会把预产期同步进来
(方案 A:读时同步覆盖),state.pregEmpty 因此为 false → 今日脚印不会被「未建档」门槛挡住。
即「上游有档案且有预产期」与「mama-box 未建档」不会同时成立(除非第 ② 步失败/超时)。
本地验证(桩后端,profile 故意延迟 0.6s 以观察顺序):
已建档(上游有预产期)→ 请求顺序 profile/pregnancy 先、footprint/tool-cards/laixin 后,
今日脚印整块显示并渲染 2 条真实事件;未建档 → 同样先取资料,今日脚印按口径隐藏。均无 JS 异常。
191 KiB
191 KiB