You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firestore web端get()返回文档未缓存,加快照监听器后正常问题咨询

问题结论

该现象完全符合Firestore Web SDK的默认设计预期,不属于代码错误,核心是Web端和移动端的Firestore缓存策略存在差异。

核心机制说明
  • Firestore 移动端SDK(Android/iOS)默认开启磁盘持久化,单次get()请求拉取的文档会自动写入缓存,供后续指定源为缓存的请求读取。但Web端SDK默认关闭磁盘持久化,且未开启持久化时,只有通过snapshots()添加了活跃监听器的文档/集合数据才会被存入临时内存缓存,单次无监听器的get()请求拉取的结果不会被写入任何缓存,因此你首次调用get()拿到数据后,第二次指定从缓存读取就会抛出 unavailable 异常。
  • 你添加快照监听器后逻辑正常的原因:监听器注册后,对应文档被纳入SDK的同步范围,此时你主动调用get()拉取的文档数据会被同步写入内存缓存,第二次指定Source.cache的请求就能正常命中。
解决方案

如果需要让Web端单次get()的结果也能被后续缓存请求命中,只需在所有Firestore操作执行前,手动开启磁盘持久化即可,示例代码如下:

// 初始化Firebase后第一时间调用
await FirebaseFirestore.instance.enablePersistence(
  PersistenceSettings(
    synchronizeTabs: true, // 可选,开启多标签页缓存同步
    cacheSizeBytes: 80 * 1024 * 1024, // 可选,自定义缓存上限,默认40MB
  )
);
注意事项
  • 开启持久化后如果缓存超出设定的大小上限,SDK会自动清理最近最少使用的缓存数据。
  • 持久化仅对当前浏览器环境生效,清除浏览器数据后缓存会被清空。

内容的提问来源于stack exchange,提问作者Marc Van Daele

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 16:36:03