2017-04-11 95 views
0

我有一個簡單的問題,我如何管理同時異步調用的響應?Angular 2(4)如何管理多個異步調用的響應

解釋:我有陣列JSON與打字稿一個循環,並且我請在每次迭代中環回API:

for (var i = 0; i < data.length; ++i) { 
    this.dataApi.patchOrCreate(data[i]).subscribe((resp: any)=> { 
     console.log(resp); 
    }, (err: any)=>{ 
     console.log('ERR',err); 
    }); 
} 

的問題是在每個呼叫的響應。如果所有響應都正常,我想關閉模態。我怎樣才能做到這一點?

我試圖用Observable.forkJoin但問題是調用的數量是動態的:

Observable.forkJoin(
    this.dataApi.patchOrCreate(data[0]), 
    this.dataApi.patchOrCreate(data[1]), 
    this.dataApi.patchOrCreate(data[2]), 
).subscribe(result => { 
    //Close modal 
    console.log('response',result[0],result[1]); 
}); 

感謝。

回答

1

您可以創建一個數組字段,然後在循環時推動observables。然後用這個領域的forkJoin

myObservables = []; 

constructor(...) 
... 

for (var i = 0; i < data.length; ++i) { 
    this.myObservables.push(this.dataApi.patchOrCreate(data[i])); 
} 
... 
Observable.forkJoin(
    this.myObservables 
).subscribe(result => { 
    //Close modal 
    console.log('response',result[0],result[1]); 
}); 
+0

感謝echonax裏面,我嘗試它現在! – Rodrigo

+1

完美的作品!謝謝你echonax! – Rodrigo