2017-01-24 18 views
0

すべてが正常にロードされたときに、私の子オブジェクトを反復処理し、preloadingDoneフラグを設定しようとします。子プロセスを反復して、angular2で準備ができているかどうかを確認します。

this.HeaderService.getAll().subscribe(header => { 
    header.forEach((headerline, index) => { 
    this.SubService1.get(headerline.key).take(1).subscribe(sub1 => { 
     this.SubService2.get(headerline.key).take(1).subscribe(sub2 => { 
     if(index == header.length - 1){ // <-- not working !!! :-(
      preLoadingDone = true; 
     } 
     }) 
    }) 
    }) 
}); 

この例のmyは、非同期の問題のために動作しません。どうすれば問題を解決できますか?

編集: このサービスコールは、ngOnInit()に配置されます。問題は、サブサービスのURLにロードしてテンプレートに画像を表示することです。プリロードが前に行われていない場合は、イメージがnullを指しているので、コンソールにエラーが発生しました。

+0

3つのコールバック(次、エラー、完了)があります。あなたは完全なコールバックであなたのコードを書くことができ、私はそれが動作するはずだと思う。 – micronyks

+0

あなたの答えはありがたいですが、すべてがロードされたかどうかを確認するためにsubservice2の最後の処理の完了を知る必要があります; –

+0

イメージURLの代わりにテンプレートで '?'を使用するだけではなく.. –

答えて

0
let __self = this; 
__self.HeaderService.getAll().subscribe(header => { 
    header.forEach((headerline, index) => { 
    __self.SubService1.get(headerline.key).take(1).subscribe(sub1 => { 
     __self.SubService2.get(headerline.key).take(1).subscribe(sub2 => { 
     if(index == (header.length - 1)){ // <-- not working !!! :-(
      __self.preLoadingDone = true; 
     } 
     }) 
    }) 
    }) 
}); 
+0

(header.length - 1)数学的計算のため – anshuVersatile

+0

ネストされたサブスクライバの間に 'this'スコープを生かしておくための__self – anshuVersatile

+0

私はこれが問題ではないと思います。 – micronyks

関連する問題