启用持久性的 Firestore returns 返回不存在的文档 IDS
Firestore with Persistence Enabled returns back Document IDS that do not exist
我为 Firestore 在我的 Firebase 项目上启用了 Persistence。
我正在通过一个简单的调用获取用户的文档。
this.afs
.collection('users')
.doc(user.uid)
.collection("events").snapshotChanges().subscribe(...etc etc...)
以上调用被馈送到 Angular table 数据源
也许以上这些并不重要,只是确定一下。
进入正题。
我为 collection events
返回的列表包含启用 Firestore Persistence 时可能删除的项目。
我核对了持久性提供的 IDS,有些在在线数据库中不存在。
我不确定 why/how 这是否发生了,但我对以下方面有点困惑:
我是不是做错了什么?
我应该打一些不同的电话吗?
这是一个错误吗?
当您将侦听器附加到 snapshotChanges()
时,它会立即查询本地缓存,并从中满足查询。然后它连接到服务器,以检查是否有任何更新。如果有任何更新,它将使用更新后的快照再次触发 snapshotChanges()
(并从中更新本地缓存)。
所以您确实有可能在 snapshotChanges()
的第一个回调中获得过时数据。
但通常您只需从 snapshotChanges()
更新您的 UI,因此一旦第二个(最新)数据出现,您将再次更新 UI。
我为 Firestore 在我的 Firebase 项目上启用了 Persistence。
我正在通过一个简单的调用获取用户的文档。
this.afs
.collection('users')
.doc(user.uid)
.collection("events").snapshotChanges().subscribe(...etc etc...)
以上调用被馈送到 Angular table 数据源
也许以上这些并不重要,只是确定一下。
进入正题。
我为 collection events
返回的列表包含启用 Firestore Persistence 时可能删除的项目。
我核对了持久性提供的 IDS,有些在在线数据库中不存在。
我不确定 why/how 这是否发生了,但我对以下方面有点困惑:
我是不是做错了什么?
我应该打一些不同的电话吗?
这是一个错误吗?
当您将侦听器附加到 snapshotChanges()
时,它会立即查询本地缓存,并从中满足查询。然后它连接到服务器,以检查是否有任何更新。如果有任何更新,它将使用更新后的快照再次触发 snapshotChanges()
(并从中更新本地缓存)。
所以您确实有可能在 snapshotChanges()
的第一个回调中获得过时数据。
但通常您只需从 snapshotChanges()
更新您的 UI,因此一旦第二个(最新)数据出现,您将再次更新 UI。