Gibt es eine Möglichkeit, den value
Event-Handler nur bei Wertänderung in Firebase
aufzurufen? Wenn ich einfach den value
Event-Handler ohne speziellen Code hinzufüge, wird er einmal beim Lesen des Anfangswerts und dann bei jeder Wertänderung aufgerufen. Ich möchte vermeiden, den Ereignishandler beim Lesen des Anfangswerts aufzurufen.Wert-Event-Handler nur bei Wertänderung in Firebase aufrufen
Einer der Anwendungsfälle, in denen ich diese Funktionalität brauche, ist, dass ich an einer App arbeite, in der Benutzer Aufgaben für andere Benutzer hinzufügen können. Die anderen Benutzer können eine Aufgabe entweder annehmen oder ablehnen. Es gibt einen Server, der diese Aufgaben unter Firebase
überwacht und eine Push-Benachrichtigung an den Ersteller der Aufgabe sendet, wann immer ein Benutzer eine Aufgabe annimmt oder ablehnt, d.h. wann immer sich der Status der Aufgabe ändert.
Ich habe zwei Lösungen ausprobiert.
Lösung 1:
eine Karte und einen Eintrag auf der Karte hinzufügen, wenn die value
Event-Handler aufgerufen wird, wenn es nicht bereits vorhanden ist und wenn das der Eintrag vorhanden ist, kann dann die Arbeit an Wertänderung erforderlich . Diese Lösung funktioniert, aber ich brauche diese in mehreren verschiedenen Fällen, und ich muss diese Karte in allen solchen Fällen erstellen, und ich fand es nicht eine bequeme Lösung.
Lösung 2:
Fügen Sie den value
Event-Handler wie diese
ref.on('value', (snapshot) => {
console.log('Initial call ', this.initialCall);
if(!this.initialCall) {
// Do work
} else {
this.initialCall = false;
}
}, {initialCall: true}) // {initialCall: true} is the context which is provided as this in the event handler
Hier mein Denken war, dass ich überprüfen kann, ob der Event-Handler durch Überprüfung für den Anfangswert wird aufgerufen, wenn this.initialCall
eingestellt wird true
. Wenn dies der Fall ist, setzen Sie this.initialCall
auf false
, und in den folgenden Aufrufen sollte this.initialCall
false
sein und ich kann die für eine Wertänderung erforderliche Arbeit erledigen. Unter Verwendung dieser Lösung, die ich beobachtete, war das this.initialCall
undefined
das erste Mal der Handler aufgerufen wird und dann wurde es auf true
gesetzt und dann war es true
für alle Wertänderung Event-Handler-Aufrufe für alle Aufgaben, nicht nur die, für die es wurde auf wahr gesetzt.
In Bezug auf Lösung 2 bin ich kein JS-Experte und es ist möglich, dass aufgrund einer Lücke in meinem JS-Wissen, ich etwas falsch mache, aufgrund dessen es nicht wie erwartet funktioniert.
Bitte lassen Sie mich wissen, wenn Sie eine Idee/Lösung haben, mit der Sie den value
Event-Handler nur bei Wertänderung aufrufen können.
Danke für die Antwort. Ich habe versucht, die Lösung zu komplizieren, wenn die Lösung so viel einfacher ist. Nebenbei bemerkt, siehst du irgendein Problem mit meiner versuchten zweiten Lösung. Ich dachte, ich könnte den 'Kontext' verwenden, um einige Daten an den Event-Handler weiterzuleiten und sie innerhalb zu verwenden, aber ich habe die Daten nicht im Event-Handler erhalten. Wenn Sie möchten, dass ich für dieses Problem eine andere Frage erstelle, lassen Sie es mich bitte wissen. –