创建操作符
- defer(订阅时通过工厂函数创建Observable)
- form(创建一个Array、类数组对象、Promise、可迭代对象的Observable)
- formEvent(从 DOM 事件或 Node.js EventEmitter 事件或其它事件创建一个 Observable)
- interval(计时器)
- of
- range(创建一个发送指定长度递增的连续整数)
- timer(定时器/计时器)
- iif(返回一个布尔值,从两个Observable中选择一个)
联结创建操作符
- combineLatest(订阅内部所有的Observable,每个Observable都至少发送一个值后,外部Observable才发送值的集合,直到内部所有的Observable都完成)
- zip(订阅内部所有的Observable,每个Observable都至少发送一个值后,外部Observable才发送值的集合,直到内部任意一个Observable完成,则外部Observable完成)
相同点: |
- forkJoin(订阅内部所有的Observable,内部所有的Observable都完成后统一发出最新值的集合)
- concat(订阅内部所有的Observable.顺序输出内部Observable的每个值,前一个Observable完成后才会开始输出下一个Observable)
- merge(订阅内部所有的Observable,内部任意一个Observable发送值则外部就同步发送值,内部所有的Observable完成后,外部Observable才完成)
相同点: |
- partition(类似filter,返回两个Observable,一个符合条件的Observable,另一个不符合条件的Observable)
- race(使用首个发出值的Observable)
转换操作符
- concatMap(将源Observable的每个值映射为一个新的Observable,只有前一个值对应的Observable完成后才会开始订阅下一个值的Observable)
- concatMapTo(与concatMap功能类似,但是会将源Observable的值输出为固定值)
//下面的例子,外部源Observable每2秒输出一个值,经过concatMap后,再延迟5秒输出值 |
注意:如果源数据的会无穷的输出值并且比project的速度要快,就会使外部源的值挤压在内存区等待订阅,因此会产生内存问题,比如上面这个例子,如果长时间运行就会产生内存问题 |
- mergeMap(将源Observable的每个值映射为一个新的Observable,与concanMap的区别是,内部的所有Observable会同时开始订阅)
- mergeMapTo
//下面的例子,外部源Observable每2秒输出一个值 |
- switchMap(将源Observable的每个值映射为一个新的Observable,与mergeMap的区别是,内部只会维护一个Observable,当下一个Observable开始时会取消前一个Observable)
- exhaustMap(将源Observablede值,按照project的规则进行输出,若当前值还没有输出完毕,新到达的值会被忽略掉)
//下面的例子,源值在经过exhaustMap时会先延迟1s输出,再延迟后输出值时正好源Observable的下一个值抵达,此时会被忽略掉 |
concatMap,mergeMap,switchMap,exhaustMap务必区分它们不同的用法 |
- expand(将源Observable的值,递归调用project函数)
- pairwise(将当前值和先前值放在一起作成一个数组,并发送它.只有再第二个值时才开始发送,因为第一个值没有前一个值)
- pluck(将每个源值映射到其指定的嵌套属性)
- groupBy
- scan(与reduce 函数类似)
- switchScan
- mergeScan
- map(与Array.prototype.map 函数类似,映射每一个值)
- mapTo(与Array.prototype.map 函数类似,映射每一个值至常量)
过滤操作符
- auditTime(在 duration 毫秒内忽略源值,然后从源 Observable 发送最新值)
- debounceTime(舍弃掉两次输入之间小于指定时间的值,用于防抖)
- throttleTime(忽略指定之间内的值,用于节流)
- distince(发送订阅的Observable中没有的值)
- distinctUntilChanged(发送订阅的Observable与前一个值不相等的值,使用===)
- distinctUntilKeyChanged(根据键值比较与前一个值是否相等,并返回)
- take(只发送源Observable的N个值)
- takeLast(源Observable完成,然后取最后N个值,源Observable完成时生效)
- takeWhile(源Observable的值不满足条件时,完成源Observable,注意区分filter)
- takeUntil(当提供的Observable发出值时,完成源Observable)
- skip(跳过开头的值)
- skipLast(源Observable完成前跳过最后指定数量的值,源Observable完成时生效)
- skipUntil(跳过源Observable的值,直到第二个Observable开始发送值)
- skipWhile(跳过源Observable的值,直到表达式为fals开始发送值)
- first(发出第一个值或最近到达的值)
- last(发出最后一个值)
- sample(每当提供的Observable发射值时,从源Observable中获取最近的值)
- sampleTime(周期性的从源Observable中获取最近的值,与sample类似)
- elementAt(发送源 Observable 的发送序列中位于指定 index 处的单个值)
- single(发出源Observable中符合表达式的单一值)
- filter(与Array.prototype.filter 方法类似)
多播操作符
- share(多播,转为热的Observable)
- publish