最近我在Google Cloud Firestore的集合中更改文档时开始收到多个onSnapshot
通知。
第一个是使用doc.metadata.hasPendingWrites==true
的预期的本地更改,因此我忽略了这一点,但随后我又使用了doc.metadata.hasPendingWrites==false
进行了另一个更改,就好像该文档是由其他客户端远程更改的一样。但是我是唯一接触数据库的人,所以我确定不是那样。
由于我认为其他人已修改了该文档,因此发生这种情况时,所有事情都在我的应用程序中搞砸了。 Firestore docs说,如果您选择仅元数据更改,则可以收到另一条通知,但我没有。 (我尝试将其显式设置为false-不变。)我还检查了.fromCache
,但这也是错误的。所以我很困惑!
要保存文档,我只是按常规进行操作:
await db().collection(collName))
.doc(id)
.set(shotData)
和onSnapshot请求看起来像这样:
if (shotsNotificationsUnsubscribe)
shotsNotificationsUnsubscribe()
shotsNotificationsUnsubscribe = db().collection(collnName).onSnapshot(ref => {
ref.docChanges().forEach(change => {
const {newIndex, oldIndex, doc, type} = change
// Ignore modifications from local writes
if (doc.metadata.hasPendingWrites) {
console.log(`Ignoring local mod of shot ${doc.data().kind} "${type}"`)
return
}
console.log(`Handling mod of shot ${doc.data().kind} "${type}"`)
这是在使用firebase@7.5.2的打字稿Web客户端中。我得到的是:
Ignoring local mod of shot ShotData "modified"
Handling mod of shot ShatData "modified"