操作符可以说是RxJS中的重中之重。它就是之前文章说的pipeline中的函数。
操作符是纯的,高阶的函数,永远不会改变observable对象,而是返回一个新observable对象,同时也为了链式调用。
操作符同样也是惰性求值的。
操作符有两种类型,实例的和静态的。前文出现过的from和of都属于静态类型(这里是面向对象的概念)。
平时最常用的几个操作符是map,filter以及reduce,这三个已经被讲烂了,我们这里就不讲了。我们讲一下可以和reduce类似的一个操作符scan。
在用到reduce的地方都可以直接用scan替换。我们知道reduce是个聚合操作,最后返回一个值;而scan也是聚合操作,但它返回的是多个值。这些值是聚合操作中的每一步的值。如下图:
take操作符:比如take(3),只需要3个事件;
first操作符:获取事件流中的第一个事件;
last操作符:获取事件流中的最后一个事件;
以上三个操作符都可以归为过滤类型的操作符。
do操作符:这是一个工具类型的操作符,它的作用是方便我们进行debug和跟踪数据变化。你可以用它做任何操作,一般都是有副作用的操作,比如控制台打印,写入文件,修改DOM节点等等,但它不改变事件流中的事件。这在函数式编程称为K combinator,或者在一些库中叫tap函数。