过滤操作符
频率控制
debounceTime
在设定的时间内没有新值发出时,才发出最后一个值
搜索框输入。等用户停下打字 300ms 后再发 API 请求
debounce
类似 debounceTime,但由另一个 Observable 决定等待时间
延迟时间根据某个动态条件(如网速)变化的输入。
throttleTime
发出一个值后,在设定时间内忽略后续所有值
防止按钮连点,1 秒内无论点击多少次,只触发一次请求。
throttle
类似 throttleTime,但由另一个流控制“冷却时间”
复杂的 UI 交互,冷却时间取决于某个任务是否完成。
auditTime
在设定的时间窗口内,发出窗口结束前的最后一个值。
高频滚动监听,每 200ms 检查一次滚动位置,降低计算开销。
audit
类似 audittime,由另一个流决定检测时间点。
只有在特定信号触发后,才取源流的最新状态。
sample
每当“通知流”发出信号时,取源流中的最新值。
定时保存草稿。每 30 秒自动读取编辑器内容存入数据库。
值过滤与去重类
filter
只允许符合条件的值通过
状态过滤。例如 filter(res => res.code === 200)
distinctUntilChanged
只有当前值与上一次发出的值不同时,才允许通过。
防止重复请求。如果搜索关键字没变,就不触发重新搜索
distinctUntilKeyChanged
针对对象流,只有指定的 Key 发生变化时才通过。
用户列表更新。只有 user.id 变化时才重新渲染 UI。
distinct
在整个生命周期内,只允许唯一的值通过(不发射重复值)
提去标签云。从大量文章中提去所有不重复的标签。
ignoreElements
忽略所有 next 值,只关注complete和error
纯副作用任务。只在乎任务是否跑完,不关心产出的数据。
数量控制与截断
这类操作符决定流“什么时候结束”或“取多少”
take
只取流的钱 N 个值,取完后自动 Complete(结束)
初始化请求。只要 API 返回的前两条最新消息。
takeLast
在流结束(Complete)时,发出最后 N 个值。
总结报告。流结束后,只取最后产生的 5 条日志记录
takeUntil
持续取值,直到“通知流”发出信号。
内存管理。在 React/Angular 组件销毁时停止所有订阅。
takeWhile
只要满足条件就取值,一旦条件为 false 立即杀掉流
进度监控。当进度 100% 时彻底断开 Socket 连接。
skip
跳过开头的 N 个值。
忽略初次加载。跳过 BehaviorSubject 产生的初始默认值。
skipUntil
一直跳过,直到“通知流”发出第一个值。
联动逻辑。只有用户点击“开始”后,才开始监听鼠标移动。
skipWhile
满足条件时一直跳过,直到条件第一次不满足才开始发值。
权限控制。忽略所有非法状态,直到监测到合规数据后才启动。
精确查找
first
发出第一个值(或第一个符合条件的值)
获取单条结果。只要找到第一个用户对象就结束。
last
在流结束时发出最后一个值(或符合条件的最后一个)。
获取最终状态。
find
发出第一个符合条件的项。
在数据流中搜索特定的 ID。
single
检查流是否有且仅有一个满足条件的项。
唯一性校验。如果有两个符合条件的值,它会抛错。
最后更新于