2017-05-11 159 views
0

我有一個關於Angular 4和Observable的快速問題。 在我的程序中,我有一個Component,它創建了一個應該發送給api的「事物」列表。其次,我有一個服務,它獲取一個元素(「事物」 - >一個!),將它發送給api並返回一個Observable。 Here's代碼: 組件:角4可觀察叉加入陣列

saveTimers() { 
    // gehe alle selektierten Timer durch und lege Sie an 
    let timerSuccess = []; 
    let timerFailed = []; 
    let timers = []; 
    for (let epgEntry of this.searchResult) { 
     if (epgEntry.checked) { 
      let timer = new Timer; 
      // magic 
      this.timerService.saveTimer(timer). 
       subscribe(
       data => { 
        console.log(data); 
        if (data === true) { 
         timerSuccess.push(timer); 
        } else { 
         timerFailed.push(timer); 
        } 
       }, 
       error => { this.variables.setFailure(error); } 
       ); 
     } 
     } 
//both empty, because api didn´t return yet 
     console.log(timerSuccess); 
     console.log(timerFailed); 
     if (timerSuccess.length > 0) { 
      this.variables.setSuccess('Timer erfolgreich angelegt'); 
     } 
     if (timerFailed.length > 0) { 
      this.variables.setFailure('Timer konnte(n) nicht angelegt werden'); 
     } 
    } 

服務:

saveTimer(timer: Timer): Observable<boolean> { 
// magic --> returns an observable 
} 

現在的問題:我如何使用Observable.forkJoin()(在部分)在做所有的API調用一次(btw等待所有API調用)?

非常感謝!

回答

1

事情是這樣的:

Observable.forkJoin(Observable.of(YOUR_ARRAY), saveTimer(timer: Timer)) 
    .switchMap(joined => Observable.forkjoin(http.post(joined[0]), http.post(joined[1]))) 
    .subscribe(); 

在第一forkjoin你把要送你的價值。在第二個結合兩個API調用的結果。

+0

好的,謝謝! 但是,我必須把這個...?在組件中而不是對服務的調用? 但'然後'saveTimer(定時器:定時器)不會工作... – Junias