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

为什么Firebase Firestore监听器初始调用时会触发两次回调?

Firestore监听器初始回调两次问题解答

核心原因

这不是数据重复拉取,是Firestore快照监听器的默认设计,触发两次回调的直接原因是你开启了includeMetadataChanges: true参数:

  1. 第一次回调返回的是本地缓存中的已有数据,此时快照的metadata.isFromCache属性为true
  2. 等SDK和服务端完成同步、拿到最新数据后,会触发第二次回调,此时metadata.isFromCache属性为false

就算你关闭includeMetadataChanges,如果本地存在匹配查询条件的缓存数据,初始也会先返回缓存再返回服务端数据,只是元数据变化不会额外触发回调。

解决方法

根据你的业务需求选择对应方案即可:

  • 如果你只需要服务端的真实数据,过滤掉缓存回调即可:
guard let snapshot = snapshot, !snapshot.metadata.isFromCache else {
    return
}
  • 如果你不需要监听元数据(比如数据是否还在同步、是否有未提交的写操作)的变化,直接将includeMetadataChanges参数改为false,可以减少不必要的回调。

额外提示:你的代码存在命名笔误,解析后的数组命名为cameras,但后续打印计数、回调参数用的是profiles,实际运行会触发编译错误,需要修正命名统一。

内容的提问来源于stack exchange,提问作者otymartin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 11:21:03