2017-10-12 31 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);