RXJS比较强大,操作符众多,想熟悉需要比较长时间的运用,所以大部分新手都比较疑惑应该使用哪些操作符去实现自己的数据流的操作。
更多详情请翻阅 RXJS中文翻译文档
我该选用哪个操作符? - 实例操作符
使用此页面通过类型查找Observable
适合您需要的实例运算符:
使用现有的序列 | 我想改变每个值 | map/select | ||
我想从每个值拉一个属性 | pluck | |||
我想在不影响值的情况下被通知值 | do/tap doOnNext/tapOnNext doOnError/tapOnError doOnCompleted/tapOnCompleted |
|||
我想包含值 | 基于自定义逻辑 | filter/where | ||
从序列开头 | take | |||
基于自定义逻辑 | takeWhile | |||
从序列的末尾 | takeLast | |||
直到另一个序列发射一个值或完成 | takeUntil | |||
我想忽略值 | 全部 | ignoreElements | ||
从序列的开头 | skip | |||
基于自定义逻辑 | skipWhile | |||
从序列的末尾 | skipLast | |||
直到另一个序列发出一个值 | skipUntil | |||
与以前的值相同 | distinctUntilChanged | |||
这(触发)太频繁 | throttle | |||
我想计算 | 总和 | 这些值的 | sum | |
平均值 | average | |||
使用自定义逻辑 | 并且只输出最终值 | aggregate reduce |
||
并在计算出值时输出(每一步的)值 | scan | |||
我想用元数据包装它的消息 | 描述每个消息 | materialize | ||
包括从最后一个价值以来的时间 | timeInterval | |||
包括时间戳 | timestamp | |||
经过一段时间的不活动 | 我想抛出一个错误 | timeout | ||
我想切换到另一个序列 | timeout | |||
我想确保只有一个值 | 并且如果存在多于或少于一个值则抛出错误 | single | ||
并且如果没有值,则使用默认值 | singleOrDefault | |||
我只想取第一个值 | 并且如果没有值,则抛出错误 | first | ||
并且如果没有值,则使用默认值 | firstOrDefault | |||
在一段时间内 | sample | |||
我只想取最后的值 | 如果没有值,则报错 | last | ||
并且如果没有值,则使用默认值 | lastOrDefault | |||
我想知道它包含多少值 | count | |||
我想知道它是否包含一个指定的值 | contains | |||
我想知道条件是否满足 | 只需要任一值满足 | any/some | ||
需要所有值都满足 | all/every | |||
我想把消息延迟一段特定的时间 | delay | |||
基于自定义逻辑 | delayWithSelector | |||
我想给值分组 | 直到序列完成 |
toArray toMap toSet |
||
使用自定义逻辑 | 作为数组 | buffer | ||
作为序列 | window | |||
根据特定大小分批 | 作为数组 | bufferWithCount | ||
作为序列 | windowWithCount | |||
基于时间 | 作为数组 | bufferWithTime | ||
作为序列 | windowWithTime | |||
基于时间或计数,以先发生者为准 | 作为数组 | bufferWithTimeOrCount | ||
作为序列 | windowWithTimeOrCount | |||
基于一个指定的key | 直到序列完成 | groupBy | ||
并控制每组的生命周期 | groupByUntil | |||
我想为每个值开始一个新的序列 | 并且并行地从所有序列中发出值 | flatMap/selectMany | ||
并按顺序从每个序列中输出值 | concatMap/selectConcat | |||
并在新值到达时取消先前的序列 | flatMapLatest/selectSwitch | |||
并递归地为每个新值启动一个新的序列 | expand | |||
并根据onNext,onError和onCompleted并行地从所有序列发出值 | flatMapObserver/selectManyObserver | |||
并根据onNext,onError和onCompleted顺序地从所有序列发出值 | concatMapObserver/selectConcatObserver | |||
我想把它与另一个结合起来 | 两者都完成时发出通知 | forkJoin | ||
我想执行复杂的操作,而不会打破流畅的调用 | let | |||
我想在多个订阅者之间共享订阅 | 使用特定的subject 实现 |
multicast | ||
publish share |
||||
并向未来订阅者提供最后的值 |
publishLast shareLast |
|||
并向未来订阅者重播默认值或最新值 |
publishValue shareValue |
|||
并向未来的订阅者重播n个值 |
replay shareReplay |
|||
发生错误时 | 我想重新订阅 | retry | ||
我想开始一个新序列 | catch | |||
取决于错误 | catch | |||
当完成时 | 我想重新订阅 | repeat | ||
我想开始一个新序列 | concat | |||
当完成或抛出错误时 | 我想开始一个新序列 | onErrorResumeNext | ||
当完成,抛出错误或退订时 | 我想执行一个函数 | finally | ||
我想改变路由的调度程序 | 调用subscribe (订阅) |
subscribeOn | ||
消息 | observeOn | |||
使用两个序列 | 我想决定从哪个接收值 | 取决于哪个序列先发出值 | amb | |
我想确定它们的值是否相等 | sequenceEqual | |||
我想合并它们的值 | 只有当第一个序列发射时,使用每个序列的最新值 | withLatestFrom | ||
为了 | 不改变时重复使用最新值 | combineLatest | ||
每个值只使用一次 | zip | |||
重复分享我选择的“生命周期” | 并通知每个组合 | join | ||
并给每个“左”的序列的值给“右”的序列 | groupJoin | |||
我想包含两者的值 | merge |