2017-10-12 60 views
0

我有一個情況與觀察到的是這樣的:如何執行功能對於每個可測量在RXJS

//pseudo code 
var agreement:Observable<agreement[]> = Observable.ajax({...}) 
    .flatMap(agreements:[] => { 
     agreements.forEach(agreement =>{ 
      //server request for each agreement 
      //If request fail throw exception 
     }); 
     return agreements; 
    }) 
    .map(agreements => agreements); 

在這裏,我需要的,如果它單曲在其他的服務器和拋出異常存在,如果不檢查每個協議。主要問題是如何等待所有的協議都被檢查和只有獲得結果。

回答

0

這個問題的答案取決於發生了什麼forEach循環內 - 如果agreements(一進入該flatMap)是可觀察到的,你正在使用forEach發出的,因爲你不策略是完全有點不同」不一定知道將會發射多少個物體。

假設雖然forEach只是運行其他一些基本的HTTP調用,也就是說,它返回的承諾......那麼答案是要收集的承諾,並允許他們全部完成無極路涉及,所以那麼完成可以轉化爲鏈中下一個運算符的Observable。

一些僞代碼:

var agreement: Observable<agreement[]> = Observable.ajax({...}) 
    .flatMap(agreements:[] => { 
     const promises = agreements.map(agreement => doHttpThing() 
      .then(...) 
      .catch(err => Observable.throw(err)) 
     ); 
     return Observable.fromPromise(Promise.all(promises)); 
    }) 
    .map(agreements => agreements);