在Angular2中,由于两个不同的$http调用,我有两个可观察到的结果。
现在,我想有一个组合观测…
当两个来源中的一个观察到“火”时,“火”(种族情况)。
当两者(或全部)都能观测到“火”(全部情况)时,“火”。
如何解决这个问题?
最佳答案
rxjs有操作符来完成这两个任务。我指的是RXJS版本5,正如你提到的Angular2。对于RXJS版本4,操作符的名称不同。
对于race任务,有一个rxjs操作符race
与Promise.race
行为对齐。在版本4中,运算符被称为amb
。当从承诺转换为可观察时,请注意在可观察的情况下可能有多个项目。这意味着第一次发射一个物品的可观察物将获胜,你将从这个可观察物接收发射的所有物品,直到它完成。
http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-race
https://www.learnrxjs.io/operators/combination/race.html
http://rxmarbles.com/#amb(amb版本)
对于希望等待所有可观测值发出一个值的用例,可以使用combineLatest
运算符。您需要传递一些关于如何组合发出的事件的函数,该函数可以返回给定的数组,也可以将数组项合并到一个对象中。
http://reactivex.io/documentation/operators/combinelatest.html
http://rxmarbles.com/#combineLatest
关于angular - 相当于Angular 2中的Observables的$ q.all()和$ q.race(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39816355/