Firestore snapshotChanges DocumentChangeType "removed" 从未发送
Firestore snapshotChanges DocumentChangeType "removed" never sent
我正在使用 where 子句查询 Firestore 集合并订阅了 snapshotChanges。根据文档,我应该为添加、修改和删除的每个元素获取一个事件。
我得到了添加和修改的文件,但我从来没有得到删除的文件。
这是我的代码示例:
this.db
.collection<Test>('test', ref => ref.where('someid', '==', someid))
.snapshotChanges()
.subscribe(async snapshot => {
for (const element of snapshot) {
switch (element.type) {
case 'added':
// Works fine
break;
case 'modified':
// Works fine
break;
case 'removed':
// Never triggered
break;
}
}
});
我假设这是因为我正在使用 where。有人遇到过吗?
更新:2020-10-14
经过更多测试,这似乎只是 AngularFirestore 的问题,而不是 Firestore 本身的问题。同时,作为解决方法,我直接使用 AngularFirestore.firestore.onSnapshot。
更新:2020-11-04
事实证明,对于 AngularFirestore,您需要使用 stateChanges 来获得我正在寻找的行为。希望这可以帮助某人。
当侦听器处于活动状态。
时,侦听器将接收 removed
个从查询结果中删除的文档的事件
所以在您的情况下,这意味着如果满足以下条件,您将获得事件:
- 侦听器处于活动状态,订阅了查询,并且。
- 文档已从集合中删除,或者
- 文档中
someid
字段的值发生变化。
事实证明,对于 AngularFirestore,您需要使用 stateChanges 来获得我正在寻找的行为。
这是解释 snapshotChanges 和 stateChanges 之间区别的文档:
https://github.com/angular/angularfire/blob/master/docs/firestore/collections.md
当您删除集合的最后一项时会发生这种情况,此时编译器会在空块或空块处触发。
我正在使用 where 子句查询 Firestore 集合并订阅了 snapshotChanges。根据文档,我应该为添加、修改和删除的每个元素获取一个事件。
我得到了添加和修改的文件,但我从来没有得到删除的文件。
这是我的代码示例:
this.db
.collection<Test>('test', ref => ref.where('someid', '==', someid))
.snapshotChanges()
.subscribe(async snapshot => {
for (const element of snapshot) {
switch (element.type) {
case 'added':
// Works fine
break;
case 'modified':
// Works fine
break;
case 'removed':
// Never triggered
break;
}
}
});
我假设这是因为我正在使用 where。有人遇到过吗?
更新:2020-10-14
经过更多测试,这似乎只是 AngularFirestore 的问题,而不是 Firestore 本身的问题。同时,作为解决方法,我直接使用 AngularFirestore.firestore.onSnapshot。
更新:2020-11-04 事实证明,对于 AngularFirestore,您需要使用 stateChanges 来获得我正在寻找的行为。希望这可以帮助某人。
当侦听器处于活动状态。
时,侦听器将接收removed
个从查询结果中删除的文档的事件
所以在您的情况下,这意味着如果满足以下条件,您将获得事件:
- 侦听器处于活动状态,订阅了查询,并且。
- 文档已从集合中删除,或者
- 文档中
someid
字段的值发生变化。
事实证明,对于 AngularFirestore,您需要使用 stateChanges 来获得我正在寻找的行为。
这是解释 snapshotChanges 和 stateChanges 之间区别的文档: https://github.com/angular/angularfire/blob/master/docs/firestore/collections.md
当您删除集合的最后一项时会发生这种情况,此时编译器会在空块或空块处触发。