2017-01-24 44 views
0

我嘗試迭代我的子對象並設置預加載完成標誌,當所有都成功加載。迭代childs並檢查準備好在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; 
     } 
     }) 
    }) 
    }) 
}); 

我在這個例子中的代碼不工作,因爲異步問題。我如何解決我的問題?

編輯: 這個servicecalls放在我的ngOnInit()。問題是我加載的子服務URL在模板中顯示圖像。如果之前沒有完成預加載,我在控制檯中出現錯誤,因爲圖像指向空值

+0

訂閱有'三個回調(下一個,錯誤,完成)'。你可以在完整的回調中編寫你的代碼,我相信它應該可以工作。 – micronyks

+0

感謝您的回答,但我需要知道subservice2的最後一個interation的完整,以檢查是否一切都加載;-) –

+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

__self在嵌套訂閱期間保持'this'作用域活着 – anshuVersatile

+0

我不認爲這是問題。 – micronyks