RXJS中CombineLatest/ForkJoin/Zip的区别

这几个操作符都可以将多个Observable进行组合,那么它们有什么不同呢?

组合Observable发射一个值

首先我们来看如下的示例:

// combineLatest
const combineLatestExample = Rx.Observable.combineLatest(Rx.Observable.interval(1000).take(1),Rx.Observable.interval(2000).take(1))
combineLatestExample.subscribe(value => console.log(value))

// forkJoinExample
const forkJoinExample = Rx.Observable.forkJoin(Rx.Observable.interval(1000).take(1),Rx.Observable.interval(2000).take(1))
forkJoinExample.subscribe(value => console.log(value))

// zip
const zipExample = Rx.Observable.zip(Rx.Observable.interval(1000).take(1),Rx.Observable.interval(2000).take(1))
zipExample.subscribe(value => console.log(value))

三个的运行结果都为:[0,0]
由此可以得出:如果组合的Observable都emit一个值的话,这三个操作符示没有区别的。
那么,如果Observable都emit多个值结果又会发生什么变化呢?

组合Observable发射多个值

代码示例如下:

// combineLatest
const combineLatestExample = Rx.Observable.combineLatest(Rx.Observable.interval(1000).take(2),Rx.Observable.interval(2000).take(2))
combineLatestExample.subscribe(value => console.log(value))

// forkJoinExample
const forkJoinExample = Rx.Observable.forkJoin(Rx.Observable.interval(1000).take(2),Rx.Observable.interval(2000).take(2))
forkJoinExample.subscribe(value => console.log(value))

// zip
const zipExample = Rx.Observable.zip(Rx.Observable.interval(1000).take(2),Rx.Observable.interval(2000).take(2))
zipExample.subscribe(value => console.log(value))

运行结果
combineLatest:[1,0] [1,1]
forkJoin:[1,2]
zip:[0,0] [1,1]
由此可以得出:
combineLatest:组合的Observable任意一个emit数据时,将每个的最新值组合到一起
forkJoin:等到组合的Observable数据都发射完毕后,将最终的结果组合组合到一起
zip:将组合的Observable发射的数据按照顺序一一对应到一起。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值