Wenn auf dem „child_added“ Ereignis wartet mit:Firebase: Wie führe ich einen Rückruf nach all den anfänglichen "child_added" -Aufrufen aus?
ref.on("child_added", function (snapshot) {
});
wird diese Callback-Funktion für jedes Kind zunächst einmal ausgeführt, die in der Referenz vorhanden ist.
Dieses Ereignis wird einmal für jedes anfängliche Kind an diesem Ort ausgelöst und jedes Mal, wenn ein neues Kind hinzugefügt wird, wird es erneut ausgelöst.
https://firebase.google.com/docs/reference/node/firebase.database.Reference
I Vorteil dieser Tatsache nehmen wollen zusammen mit den Bestellfunktionen, um eine geordnete Anordnung zu konstruieren:
orderedArray = [];
ref.orderByValue("rating").on("child_added", function (snapshot) {
orderedArray.push(snapshot.val())
});
// how do I run a callback after the last child has been added?
Allerdings gibt es keine Möglichkeit, (meines Wissens) um das letzte Mal zu sagen, dass der Rückruf child_added
aufgerufen wurde, kann ich meinen eigenen Rückruf nicht korrekt ausführen, nachdem das letzte Kind zu meinem Array hinzugefügt wurde.
Hier ist meine Abhilfe jetzt zu diesem Recht:
orderedArray = [];
ref.orderByValue("rating").on("child_added", function (snapshot) {
orderedArray.push(snapshot.val())
});
setTimeout(function() {
ref.off("child_added") // unbind event
callback()
}, 3000)
Das ist ziemlich lückenhaft, vor allem in dem Fall, dass es wird mehr als 3 Sekunden dauern, bis alle Daten aus der Datenbank zu erhalten.
Irgendwelche Ideen hier?
und 'forEach()' wird sie in der Reihenfolge lesen, auch wenn ich eine Ordnungsfunktion wie 'orderByValue()' verwendet? – octopod
Lesen in die Dokumentation ein bisschen mehr, tut es! Vielen Dank. – octopod
Wie sieht es mit Fällen aus, wenn eine große Anzahl von Objekten im Snap ist? Es klingt, als ob diese Lösung zuerst alle Elemente in den Speicher lädt und sie dann dem Rückruf zurückgibt. – Ivan