2

so versuche ich Daten aus der Feuerbasis mit dem folgenden Code abrufen“Firebase - Wie Daten aus .Sobald Anruf abzurufen

loadblah(){ 
    var valueArray = []; 
    valueArray = firebase.database().ref("/Users/johnny/files/").once('value', function(snapshot){ 
     console.log(snapshot.val()); //First output 
     return snapshot.val(); 
    }); 

    console.log(valueArray); //Second output 
} 

Wie auch immer, wie Sie einige console.log der für das Debuggen ive hinzugefügt sehen können, und sie bekommen völlig unterschiedliche Ergebnisse.

erste Ausgabe ist, was ich hatte gehofft, für, zB { fileOne: {title: blah, text: blah}, fileTwo... } und so weiter. aber für die zweite Ausgabe, bekomme ich diese.

enter image description here

Haben Sie eine Idee, wie Sie Daten in snapshot.val() abrufen können? Jede Hilfe würde sehr geschätzt werden, ich bin ziemlich neu dazu.

EDIT: Noch besser wäre es, wenn Sie mir irgendwie zeigen können, wie für die Synchronisation Sachen die .on Funktion nutzen zu können, die

Antwort

1

Ihre Verwirrung ist sehr verbreitet für die mit Firebase arbeitet zum ersten Mal wäre genial.

Die Firebase once Aufruf ist ein asynchroner Betrieb und als solches wird es erst später abgeschlossen werden, wenn der Download endlich fertig ist - lange nach Ihre loadblah() Funktion zurückkehrt. Wenn es tut, wird die bereitgestellte Funktion aufgerufen und Ihre Daten werden bereit sein, in snapshot.val() zu verwenden.

Umgekehrt ist der zurückgegebene Wert, der in Ihrer valueArray var gespeichert ist, eine firebase.Promise, die eine alternative Möglichkeit bietet, auf diesen Wert zu warten.

Sie haben bereits einen function für den Anruf once bereitgestellt, so dass Sie die Versprechensroute für jetzt ignorieren können. Mit anderen Worten, fügen Sie Ihre Snapshot-Verarbeitungslogik in die Funktion an once übergeben (und ignorieren Sie den Rückgabewert).

+0

Ohh, ich verstehe! Der Functon (Snapshot) wird also erst aufgerufen, nachdem die Elemente heruntergeladen wurden. Wenn ich die console.log() innerhalb der Funktion setzen, funktioniert es wie erwartet. Schnelle Frage, wie setze ich einen Zustand innerhalb dieser Funktion? es scheint mich nicht zu lassen - zB (this.setState ist undefiniert) –

+0

@RyanTurnbull Weird ... as [diese Anleitung zeigt] (https://firebase.googleblog.com/2016/01/the-beginners-guide -to-react-native-and_84.html? m = 1) sollte es auch möglich sein, 'this.setState' von dort aufzurufen. –

+0

yeah es sagt this.setState ist keine Funktion und ist undefined –

Verwandte Themen