2017-04-11 89 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