2017-06-18 6 views
0

FirebaseObjectObservableを購読してFirebaseデータベースからオブジェクトのプロパティの値を取得しました。このプロパティは複数の値を含むことができるので、値をローカル配列変数に格納しました。角2、配列を反復することができません

しかし、forEachを使用してこのローカル配列変数を反復処理することはできません。だから、私はconsole.logにこの配列変数を記録します。この変数はjson形式を持っているようですが、なぜ私は反復できないのでしょうか。この変数を繰り返し処理する方法を見つけるのを助けてください。

*コードとコンソール画像:

Code Screenshot

Console Screenshot

*編集*

私が反復するためにサブスクライブメソッド内のコードをシフト。

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

質問に関連するコードを入力してください。また、「I」という単語が大文字になっている正しい国際的な英語を書いてください。最後に、あなたの学習曲線のどこにあるか、将来の答えにどのように感謝しているかについて、不必要な詳細を私たちに忘れないようにしてください。 –

+0

[非同期呼び出しからの応答を返すにはどうすればよいですか?](https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) –

答えて

0

悲しいことに、私はコメントできません。角張った、または火災の問題ではありません。
コンソールのスクリーンショットに基づいて、通常の配列です。
this.fileKeysまで繰り返してみましたか?
誰かがこれをコメントとして投稿できる場合は、これを回答として削除します。

+0

はい私はthis.fileKeysを反復しようとしましたが、ループに入っていないようです。 'this.fileKeys.forEach(x => { console.log(" Iterating ... "); }); ' – PR7

+0

' console.log(this.fileKeys.length)) 'を実行して結果を投稿してもらえますか? – Garamaru

+0

'console.log(this.fileKeys.length)'はサブスクライブ – PR7

1

スクリーンショットにネストされた配列が1つあります。最初のものは長さ1で、ネストされたものは長さ2です。アクセスできるようにarray[0].forEach(item => console.log(item))

+0

'内で使用されている場合は0 – PR7

2

this.fileKeysの値は、subscribeハンドラ内でのみ使用できます。これは非同期プログラミングの基本です。コンソールログはサブスクリプションの直後にあり、サブスクリプションが起動する前に実行されます。

関連する問題