2016-06-01 6 views
1

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.initialCallfalse sein und ich kann die für eine Wertänderung erforderliche Arbeit erledigen. Unter Verwendung dieser Lösung, die ich beobachtete, war das this.initialCallundefined 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.

Antwort

2

Ein value Ereignis in Firebase wird sofort mit dem aktuellen Wert und dann immer dann aufgerufen, wenn sich der Wert ändert. Wenn Sie sich nur kümmern, wenn der Wert sich ändert, können Sie das ursprüngliche Ereignis einfach ignorieren:

+0

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. –

Verwandte Themen