这个系列不知不觉已经写到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章的内容。

  1. x 到 xMap 再到 xMapTo。xMap,这类操作符大都是在基础功能上增加 map 功能。加上To以后的操作符xMapTo大都是直接将输入流映射到一个输出流,并且它们都不关心输入流上的值。

    • concat 连接流,需要注意被连接的流需要发出完成通知。
    • concatMapTo 和concatMap类似,只不过连接的流始终是相同行为的流。
    • mergeMapTo 和mergeMap类似,只不过内部流始终是相同行为的流。
  2. 使代码更好的保持响应式风格的操作符

    • never 一条永远不会发出任何通知的流。
    • empty 一条只发出,并且立刻发出完成通知的流。
    • defaultIfEmpty 如果输入流没发出任何值,只发出完成通知,那么发出一个默认值。
  3. 与错误相关的一些操作符,如已经提到的retryWhen

    • retry 当输入流上有错误时,可以发出重试,传入的参数就是重试的次数。
    • catchError 5.x版本里叫 catch,毫无疑问就是用来捕获流上的错误的。
    • throwError 一条只发出,并且立刻发出错误通知的流。
  4. 用来周期性发出值的流,如已经提到的timer

    • interval 只看名字就知道它就是一个计时器,参数就是发出值的周期。
  5. 一些降低数据发出频率的操作符 或者 防止值重复的操作符

    • distinct 用来鉴别值是否应该被认为是相同的,可以接受一个可选的函数作为参数。
    • distinctUntilChanged 这个操作符最大的优势在于,传入它的函数,可以接收当前值和前一个值作为参数。
    • distinctUntilKeyChanged 这个就简单粗暴多了,通过一个key来判断值是否发出了改变。
    • debounceTime 控制表单字段的数据发出频率时经常会用到,比如输入值改变时自动发出请求去服务器拉取数据的场景。
    • auditTime 在一定时间内忽略输入流上的值,只发出时间过后的输入流上最后发出的值。
    • throttleTime 和auditTime差不多,只是发出时间过后输入流上最先出出的值。
  6. 其它

    • partition filter 只能让你拿到'true'或'false'的数据流,而这个操作符可以让你同时拿到两个条,一条完全发出'true‘值,另一条完全发出’false‘值。
    • iff 在订阅的那一瞬间再决定使用哪条一条流,第一个参数是判断函数,第二个参数是判定结果为true时使用的流,第三个参数当然就是false时使用的流。
    • timeout 通俗的说就是’我只想等xxx时间,这段时间内没有发出值的话,我认为over了。’,就是用来设置超时时间而已。
    • tap 5.x的版本里也就做do,意思就是在数据处理的过程中开个小差做点其它事情,比如调试时你会经常需要它把数据log到控制台上。
    • find 找到流上符合某个条件的第一个值。
    • every 流上的值是不是都符合某一个条件。

加上之前的28个,一共总结了49个操作符,如果这些不能满足你的业务需求,可以仔细研究一下官网上公布的其它操作符,相信总有一款适合你!

图片描述


sxlwar
178 声望12 粉丝