Ich verwende firebase-queue
in einer mobilen App, um einige Arbeit auf einen Server auszulagern. Ich sende Aufgaben mit einer Anfrage an die Firebase-Queue und beginne, 'value' -Ereignisse unter responses/<request-id>
anzuhören, um die Antwort für die Aufgabe zu erhalten. Der Mitarbeiter der Warteschlangenwarteschlange erhält die Aufgabe, verarbeitet sie und legt die Ergebnisse auf responses/<request-id>
fest.Firebase 'Wert' Event-Handler wird zuerst mit Null-Wert und dann mit dem tatsächlichen Wert
Ich beobachte, dass der value
Event-Handler zweimal aufgerufen wird, zunächst mit einem Nullwert und dann wird die tatsächliche Antwort. Ich habe diesen Beispielcode, der verwendet werden kann, das Verhalten
Client.js
var Firebase = require('firebase');
var ref = new Firebase('https://propertyfindercp.firebaseio.com');
ref.child('responses/<request-id>').on('value', function(snapshot) {
console.log('Value event ', snapshot.val());
});
worker.js
var Firebase = require('firebase');
var ref = new Firebase('https://propertyfindercp.firebaseio.com');
ref.child('responses/<request-id>').set({data: 123});
Ersetzen Sie einfach die <request-id>
in beiden Dateien zu simulieren einige gleiche zufällige Wert und führen Sie die client.js
Datei mit node client.js
und dann die worker.js
mit node worker.js
Ich beobachte die folgende Ausgabe auf der Client-Konsole
Value event null
Value event { data: 123 }
Ich habe erwartet, nur die zweite Linie zu sehen. Warum wird der value
Event-Handler mit einem null
Wert auch aufgerufen?
@ FrankvanPuffelen Ich verstehe, dass, wenn ich den Wert von 'Antworten/' lösche, würde ich ein anderes 'Wert' Ereignis mit' null' Wert erhalten, weil ich tatsächlich eine 'null' an dieser Stelle, aber es ist ein bisschen Zähler -intuitiv, dass ich einen Nullwert erhalte, wenn ich zum ersten Mal einen 'Wert'-Ereignishandler an einem Ort anschließe. Tatsächlich macht es den Event-Handler "once" in diesem Fall irgendwie unbrauchbar, weil es am Ende mit einem "null" -Wert aufgerufen wird und nicht aufgerufen wird, wenn der Wert tatsächlich gesetzt ist. Was ist der Zweck des Aufrufs des Ereignishandlers "value" mit dem Wert "null", wenn er zum ersten Mal angefügt wird? 1 –
Außerdem weiß ich nicht einmal, ob ein 'value' Event-Handler mit 'null'-Wert aufgerufen wird, liegt es daran, dass der Wert an dieser Stelle gelöscht wird, damit ich ihn entsprechend behandeln kann oder nur der erste Aufruf ist. Also, ich könnte am Ende mit etwas mehr Wenn-sonst Logik im Code 2 –
Ich erklärte, wie die API funktioniert. Hier ist, wie Sie einen Listener "warten auf Wert" machen können, was wahrscheinlich ist, was Sie versuchen zu tun: https://twitter.com/puf/status/719889323655634945 –