2017-01-15 4 views
5

Ich versuche, die Daten von meinem Firebase mit AngularFire2 zu bekommen. Ich möchte bestimmte Daten prüfen und nachdem ich diese Daten von Firebase erhalten habe, kann ich sie nur im bestimmten Umfang und nicht nach der Operation zu Firebase überprüfen. Warum passiert das?AngularFire2 Zugangsdaten nach dem Abrufen

Unten ist mein Code:

this.af.database.list('/users/1qfcMAQnglX9jsW5GdLpPko1HqE2', { preserveSnapshot: true}) 
.subscribe(snapshots=>{ 
    snapshots.forEach(snapshot => { 
     if(snapshot.key=="reg_boolean"){ 
     console.log(snapshot.val()); 
     this.bo=snapshot.val(); 
     } 
     this.currentUser.push({key:snapshot.key,value:snapshot.val()}); 
     console.log(this.currentUser); 
     //console.log(snapshot.key, snapshot.val()); 
     if(this.bo==true){console.log("happy"); }; //i can access only in this scope 
    }); 

}) 
if(this.bo==true){console.log("happy"); }; //why i can access this value??it's undefined, this happen before the subscribe with angularfire2 

enter image description here

+1

Victor Antwort erklärt, aber ich werde verweisen Sie auch auf diese Referenz Fragen: [? Wie kann ich die Antwort von einem asynchronen Aufruf zurückkehren] (http://stackoverflow.com/q/14220321 /), [Variablen, die während der Funktion $ .getJSON gesetzt wurden, die nur innerhalb von function verfügbar sind] (http://Stackoverflow.com/q/1739800) und [jQuery: Daten nach erfolgreichem AJAX-Aufruf zurückgeben] (http://stackoverflow.com)/1/5316697). –

Antwort

8

Es ist nicht definiert, weil this.af.database.list es asynchron ist so der Code in subscribe wird ausgeführt, wenn this.af.database.list die Daten nicht abgerufen werden. Also, als der Code an die Zeile if(this.bo==true){console.log("happy"); }; kam, hat es nichts, weil subscribe überhaupt nicht beendet wurde.

Die abonnieren es ist wie das alte Versprechen, aber jetzt ist es mit rxjs arbeiten Ich empfehle Ihnen, es zu lernen, weil eckig und ionische hat viel Fokus darauf.

Versuchen bei https://www.learnrxjs.io/ suchen

+0

Victor hast du jetzt irgendeine Lösung für mich oder irgendetwas kann dieses Problem lösen? weil ich nicht sicher bin, wie man mit rxjs arbeitet. –

+0

@AdirZoari was möchten Sie mit den Daten machen? –

+0

Okay, ich erkläre dich im Allgemeinen. Nach der Anmeldung in seinem ersten Mal er Konto erstellen und ausfüllen, um alle erforderlichen Daten (Abteilung Name, Jahr) zu füllen, setze ich das reg_boolean auf wahr bedeutet, wenn das nächste Mal er in App eingeben, überprüft es Daten, wenn die reg_boolean ist wahr Er muss also nicht erneut den Abteilungsnamen und das Jahr eingeben, damit er zur Startseite navigiert und sich nicht anmeldet. –

Verwandte Themen