hookehuyr

fix(离线预订缓存轮询): 修复网络监听器注销后状态同步问题

确保网络监听器注销时同步清理相关状态,避免脏数据干扰后续流程
优化启用轮询时的依赖检查逻辑,保证即时生效
......@@ -170,7 +170,14 @@ const teardown_network_listener = () => {
polling_state.network_listener = null
}
}
// 注销后,清空网络监听器引用,确保后续调用能正常工作
polling_state.network_listener = null
/**
* 核心目的:清空 network_usable = null 是为了让状态和监听器的生命周期完全同步 —— 监听器注销后,其产生的网络状态也必须失效,避免 “无监听器却有状态” 的矛盾;
* 关键作用:通过让 should_run_polling() 直接返回 false,杜绝基于过期状态启动轮询的可能;
* 设计思维:体现了 “状态闭环” 的工程化思想 —— 任何状态都要有明确的产生、更新、销毁逻辑,不残留 “脏数据” 干扰后续流程。
*/
// 清空网络可用性状态,确保后续判断逻辑能正常工作
polling_state.network_usable = null
}
......@@ -256,7 +263,11 @@ const release_polling_ref = () => {
export const enable_offline_booking_cache_polling = (options) => {
normalize_options(options)
// 核心防重复——如果已经启用,直接返回
/**
* 核心目的:对 app_enabled=true 的场景做兜底,确保轮询在 “已启用但异常停止” 时能被主动恢复,而非被动等待网络变化;
* 执行逻辑:先保证网络监听器(轮询的依赖)就绪,再尝试启动轮询,且利用 start_offline_booking_cache_polling 的幂等性避免重复;
* 设计思维:体现了 “主动调用需即时生效” 的用户体验考量,以及 “依赖前置检查” 的工程化思维 —— 先保证依赖(监听器)就绪,再执行核心操作(启动轮询)。
*/
if (polling_state.app_enabled) {
ensure_network_listener().then(() => start_offline_booking_cache_polling(polling_state.last_options || {}))
return
......