typescript - Firestore snapshotChanges DocumentChangeType "removed" skickas aldrig
Jag frågar en Firestore-samling med en where-sats och är prenumererad på snapshotChanges. Enligt dokumentationen borde jag få ett händelse för varje element som läggs till, ändras och tas bort.
Jag får de tillagda och ändrade dokumenten utan problem, men jag får aldrig de borttagna.
Här är ett exempel på min kod:
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;
}
}
});
Jag antar att det beror på att jag använder en where. Har någon stött på detta?
UPPDATERING: 2020-10-14
Efter ytterligare tester verkar det vara ett problem endast med AngularFirestore och inte med Firestore själv. Under tiden använder jag som en tillfällig lösning AngularFirestore.firestore.onSnapshot direkt.
UPPDATERING: 2020-11-04 Det visar sig att med AngularFirestore behöver du använda stateChanges för att få det beteende jag letade efter. Hoppas detta kan hjälpa någon.
Svar #1
Visade sig att med AngularFirestore behöver du använda stateChanges för att få det beteende jag letade efter.
Här är dokumentationen som förklarar skillnaden mellan snapshotChanges och stateChanges: https://github.com/angular/angularfire/blob/master/docs/firestore/collections.md
Svar #2
En lyssnare kommer att ta emot removed-händelser för dokument som tas bort från frågeresultaten medan den lyssnaren är aktiv.
Så i ditt fall betyder det att du kommer att få händelsen om:
- Lyssnaren är aktiv, prenumererad på frågan, och.
- Dokumentet tas bort från samlingen, eller
- Värdet på fältet
someidi dokumentet ändras.