这个系列不知不觉已经写到10了,单纯从使用上来说的话,大部分的知识点也都讲过了,本来不打算写了,刚好今天有同学在群里说希望能总结一下常用的操作符,那就用这篇文章给这个系列画一个句号吧。
已经提到过的
早在这个系列的第4,第5章的时候就提到过了操作符,有兴趣的同学可以翻一下,这里简单的回顾一下:
- 创建类:3个,分别是 from,of 和 timer;
- 过滤类:5个,分别是 filter, first, skip,take 和 takeUntil;
- 组合类:5个,分别是 combineLatest, withLatestFrom, zip, merge, forkJoin;
- 转换类:5个,分别是 map, mergeMap,switchMap, concatMap, groupBy;
- 聚合类:2个,分别是 reduce,scan;
另外在其它的章节的示例中用到过的还有delay,retryWhen,share,switchMapTo,mapTo,bufferCount,delay,takeWhile,如果看到这些名字你就能清楚的说出它们的作用的话,那么恭喜你,数据处理中要面临的多数场景其实你都已经可以应付了。
rxjs的操作符大致有120个左右(5.x版本),除了上面那28个,我们再来看下还有哪些会经常用到。
其它一些常用的操作符
这章里就不详细的解释每一操作符了,只简单提一下功能,关于如何学习它们可以参照第4章的内容。
-
x 到 xMap 再到 xMapTo。xMap,这类操作符大都是在基础功能上增加 map 功能。加上To以后的操作符xMapTo大都是直接将输入流映射到一个输出流,并且它们都不关心输入流上的值。
- concat 连接流,需要注意被连接的流需要发出完成通知。
- concatMapTo 和concatMap类似,只不过连接的流始终是相同行为的流。
- mergeMapTo 和mergeMap类似,只不过内部流始终是相同行为的流。
-
使代码更好的保持响应式风格的操作符
- never 一条永远不会发出任何通知的流。
- empty 一条只发出,并且立刻发出完成通知的流。
- defaultIfEmpty 如果输入流没发出任何值,只发出完成通知,那么发出一个默认值。
-
与错误相关的一些操作符,如已经提到的retryWhen
- retry 当输入流上有错误时,可以发出重试,传入的参数就是重试的次数。
- catchError 5.x版本里叫 catch,毫无疑问就是用来捕获流上的错误的。
- throwError 一条只发出,并且立刻发出错误通知的流。
-
用来周期性发出值的流,如已经提到的timer
- interval 只看名字就知道它就是一个计时器,参数就是发出值的周期。
-
一些降低数据发出频率的操作符 或者 防止值重复的操作符
- distinct 用来鉴别值是否应该被认为是相同的,可以接受一个可选的函数作为参数。
- distinctUntilChanged 这个操作符最大的优势在于,传入它的函数,可以接收当前值和前一个值作为参数。
- distinctUntilKeyChanged 这个就简单粗暴多了,通过一个key来判断值是否发出了改变。
- debounceTime 控制表单字段的数据发出频率时经常会用到,比如输入值改变时自动发出请求去服务器拉取数据的场景。
- auditTime 在一定时间内忽略输入流上的值,只发出时间过后的输入流上最后发出的值。
- throttleTime 和auditTime差不多,只是发出时间过后输入流上最先出出的值。
-
其它
- partition filter 只能让你拿到'true'或'false'的数据流,而这个操作符可以让你同时拿到两个条,一条完全发出'true‘值,另一条完全发出’false‘值。
- iff 在订阅的那一瞬间再决定使用哪条一条流,第一个参数是判断函数,第二个参数是判定结果为true时使用的流,第三个参数当然就是false时使用的流。
- timeout 通俗的说就是’我只想等xxx时间,这段时间内没有发出值的话,我认为over了。’,就是用来设置超时时间而已。
- tap 5.x的版本里也就做do,意思就是在数据处理的过程中开个小差做点其它事情,比如调试时你会经常需要它把数据log到控制台上。
- find 找到流上符合某个条件的第一个值。
- every 流上的值是不是都符合某一个条件。
加上之前的28个,一共总结了49个操作符,如果这些不能满足你的业务需求,可以仔细研究一下官网上公布的其它操作符,相信总有一款适合你!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。