【Rxjs】实例讲解zip和combineLatest操作符的区别
最近因为要改一个bug, 开始死磕RxJS, 这个东西理解起来是真复杂啊,不过经过四天的战斗,终于搞好了bug。
有个想法是接下来写一写RxJS的系列知识。这篇算是一个开头吧。如果出了系列文章,会按照顺序再排版的,在之前添加上一些概念的通俗解释。如果你们已经对RxJS有了认知,就想知道zip和combineLatest的区别,那么直接往下看吧。
一 应用场景
假设我们有两个input输入框,一个是输入矩形的宽度,一个是输入高度,计算矩形的面积。
来看代码:
上面的代码中,我们先使用了combineLatest运算符。
假设我们输入width = 5, height = 4,来看结果:
然后,我们修改width = 6, height不变:
再修改height = 3 , width不变:
继续修改height = 4, width不变:
通过以上的步骤我们可以看出,当使用了combineLatest时,每个流只要发生了变化,就会拿这个流的最新值和另一个流的最新值进行运算。
我们画出上面整个过程中combineLatest的弹珠图如下:
接下来,我们把combineLatest改成 zip,输入同样的数据流,观察结果:
输入 width = 5, height = 4, 观察结果:
修改width = 6,height不变:
注意这里,output的值没有发生变化,依旧是前一次的20。
继续....修改height = 3,width不变:
我们发现output的值发生变化了,为18.
再继续...修改height = 4,width不变:
output的值不发生变化。
观察上面的结果,我们可以总结出zip操作符是要等每个流都发射完第一次数据后,才进行组合,当这些流都发射完第二次数据时,再进行组合,以此类推。弹珠图如下所示:
以上就是zip 操作符和combineLatest的区别,没看明白的....再多看几遍吧。