2017-06-18 7 views
0

Ich habe ein FirebaseObjectObservable abonniert, um den Wert einer Eigenschaft eines Objekts aus meiner Firebase-Datenbank abzurufen. Diese Eigenschaft kann mehrere Werte enthalten, daher habe ich die Werte in einer lokalen Array-Variablen gespeichert.Angular 2, Ich kann das Array nicht durchlaufen

Aber ich bin nicht in der Lage, diese lokale Array-Variable mit forEach zu durchlaufen. Also ich console.log diese Array-Variable. Diese Variable scheint json-Format zu haben, deshalb kann ich nicht iterieren. Bitte helfen Sie mir einen Weg zu finden, diese Variable zu durchlaufen.

* Code und Konsole Bilder:

Code Screenshot

Console Screenshot

* Edit *

ich den Code innerhalb des abonnieren Methode verschoben iterieren.

getAttachments() { 
this.assignment.subscribe(asnDetails => { 
    if (asnDetails.fileKey) { 
    this.fileKeys.push(asnDetails.fileKey); 
    this.fileKeys[0].forEach(asnFileKey => { // <---- shifted this forEach loop inside subscribe 
     this.asnFiles = this._getAsnService.getAssignmentFiles(asnFileKey); 
     this.asnFiles.subscribe(file => { 
     this.fileNames.push(file.name); 
     }); 
    }); 
    } 
}); 
} 
+0

Bitte geben Sie den entsprechenden Code in die Frage ein. Bitte schreiben Sie auch korrektes internationales Englisch, in dem das Wort "I" großgeschrieben wird. Schließlich, bitte ersparen Sie uns unnötige Details darüber, wo Sie in Ihrer Lernkurve sind, oder wie dankbar Sie für zukünftige Antworten sind. –

+0

Mögliches Duplikat von [Wie gebe ich die Antwort von einem asynchronen Anruf zurück?] (Https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) –

Antwort

0

Leider kann ich nicht kommentieren. Es ist kein Winkel- oder Firebase-Problem.
Es ist ein normales Array, basierend auf Ihrer Konsole Screenshot.
Haben Sie versucht, this.fileKeys zu durchlaufen?
Wenn jemand dies als Kommentar posten könnte, würde ich dies als Antwort löschen.

+0

Ja, ich habe versucht, dieses.fileKeys zu wiederholen, aber es scheint, als ob es nicht in die Schleife eintritt. 'this.fileKeys.forEach (x => { console.log (" Iterating ... "); }); ' – PR7

+0

Können Sie eine' console.log (this.fileKeys.length)) 'bitte machen und das Ergebnis veröffentlichen? – Garamaru

+0

'console.log (this.fileKeys.length)' 0 zurück – PR7

1

Sie haben ein verschachteltes Array in Ihrem Screenshot. Der erste ist von der Länge 1 und der verschachtelte ist von der Länge zwei. So können Sie zugreifen array[0].forEach(item => console.log(item))

+0

'this.fileKeys [0] .forEach (item => { console.log (item); }); 'versuchte dies gerade jetzt, habe diesen Fehler: Uncaught (in Versprechen): TypeError: Kann Eigenschaft 'forEach' von undefined nicht lesen TypeError: Kann Eigenschaft 'forEach' von undefined nicht lesen um .... – PR7

2

Der this.fileKeys Wert ist nur innerhalb der subscribe Handler verfügbar. Das ist grundlegend für die asynchrone Programmierung. Ihr Konsolenprotokoll befindet sich unmittelbar nach dem Abonnement und wird ausgeführt, bevor das Abonnement geändert wurde.

Verwandte Themen