2017-10-13 30 views
-1

aus irgendeinem Grund kann ich nicht den gegebenen Elementwert innerhalb der Schleife Typoskript foreach erhaltenWinkel Typoskript foreach kann nicht Wert erhalten

constructor(db: AngularFireDatabase) { 

} 
this.fbUserData = this.db.list('users/'+this.userid).valueChanges() 
     this.fbUserData.forEach(element => { 
     this.currentRole = element[2].toString(); // receive value 
    }) 

jetzt außerhalb der Schleife ich den Wert aus dem AngularFireBase erhalten möchten ich folgendes versucht:

this.userid = this.firebaseAuth.auth.currentUser.uid.toString(); 
     this.fbUserData = this.db.list('users/'+this.userid).valueChanges() 
     this.fbUserData.forEach(element => { 
      this.rolelist.push(element[2].toString()); 
    }) 

aber this.rolelist (Array) bleibt außerhalb der Schleife leer. innerhalb der Schleife wird der Wert wie array [ ‚test‘]

Ich möchte sie empfangen außerhalb der Schleife so console.log:

checkAuth(data){ 


    this.userid = this.firebaseAuth.auth.currentUser.uid.toString(); 
    this.fbUserData = this.db.list('users/'+this.userid).valueChanges() 
    this.fbUserData.forEach(element => { 
     this.rolelist.push(element[2].toString()); 
}) 
    console.log(this.rolelist); 

so dass this.rolelist hat den Elementwert aus der foreach loop

+0

Was denkst du 'this.fbUserData' ist? Was sagt deine IDE? Wenn du herausgefunden hast, was es ist, welche Art von Dingen kannst du damit machen? Was soll "forEach" machen? Glaubst du, dass es "Array # forEach" oder "FirebaseListObservable # forEach" ist, die völlig verschieden sind? Falls dies eine AngularFire-Frage ist, markieren Sie sie bitte als solche und erwähnen Sie die Version, die Sie verwenden. Auch wenn es nicht zu viel Mühe macht, tun Sie sich selbst und allen anderen einen großen Gefallen und stecken Sie Ihren Code richtig ein. –

+0

Sie können es nicht außerhalb des Abonnements verwenden, dies ist asynchron, überprüfen Sie: https://stackoverflow.com/questions/43055706/how-do-i-return-the-response-from-an-observable-http-async-call -in-eckig2 – Alex

Antwort

0

Ihr Firebase-Aufruf gibt ein Observable zurück => Sie müssen .subscribe() zu this.fbUserData, um auf den Wert zuzugreifen.
this.fbUserData.subscribe(userData => {});
Die Funktion in subscribe wird jedes Mal aufgerufen, wenn sich die Daten mit den neuen Daten als Argument ändern. Wenn Sie keine Updates wünschen, können Sie this.fbUserData.first().subscribe(userData => {}); tun.
Sie müssen import 'rxjs/add/operator/first';, damit das funktioniert

Verwandte Themen