使用RxJS承诺.all()

ben*_*ope 17 rxjs angular

我正在Angular 2中编写一个应用程序,我想执行几个http请求并在响应上运行一个函数.

在Angular 1中,我会写类似的东西 $q.all([$http.get(...), $http.get(...), ...]).then(doSomethingWithResponses);

但Angular 2返回RxJS Observables,经过一堆阅读后,我仍然无法弄清楚如何得到几个http请求的响应.怎么能这样呢?

pix*_*its 32

正如@Eric Martinez指出的,有forkJoin.forkJoin并行运行所有可观察序列并收集它们的最后元素.

Rx.Observable.forkJoin([a,b]).subscribe(t=> {
        var firstResult = t[0];
        var secondResult = t[1];
});
Run Code Online (Sandbox Code Playgroud)

  • 如果Observable a或Observable b失败(或者被取消或出错或者不符合条件),@ EricMartinez是否有一种方法可以使结果数组中的索引"溶解"?因此,例如,如果Observable b对data1失败,那么结果数组的长度将为1,而不是在Observable.forkJoin(...)参数块内进行的2次调用? (2认同)

kak*_*ori 7

我不确定你是否想要使用forkJoin/zip,特别是考虑combineLatest更容易理解并且会在每个子流事件上发出,而forkJoin基本上每个子流上的样本都已经发出.

当你想要在路上组合多项目Observable时,这可能会让你感到困惑.

  • 不同之处在于,您不希望收到有关每个流的每个发射的通知。您只关心何时所有流都发出了数据。可以将其视为与`Promise.all(promises)`或`$ q.all(promises)`相同的可观察性。 (2认同)