Observable Operator
- skip:可以略过前几个送出的元素,但是原本元素的等待时间仍然存在
- takeLast:必须等到整个observable完成(complete),才能知道最后的元素有哪些,并且同步送出
- last:takeLast(1)的简化写法,那就是last()用来取得最后一个元素。
- concat:把多个observable 实例合并成一个,必须先等前一个observable完成(complete),才会继续下一个
- startWith:可以在observable的一开始塞要发送的元素,值是一开始就同步发出的,这个operator 很常被用来保存程式的起始状态!
- merge:把多个observable同时处理,跟concat一次处理一个observable是完全不一样的
- combineLatest:会取得各个observable 最后送出的值,再输出成一个值
- zip:取每个observable 相同顺位的元素并传入callback
- withLatestFrom:他有主从的关系,只有在主要的observable 送出新的值时,才会执行callback
- scan:是Observable 版本的reduce 只是命名不同。跟reduce 最大的差别就在scan 一定会回传一个observable 实例,而reduce 最后回传的值有可能是任何类型,必须看使用者传入的callback 才能决定reduce 最后的返回值。
- buffer:要传入一个observable(source2),它会把原本的observable (source)送出的元素缓存在阵列中,等到传入的observable(source2) 送出元素时,就会触发把缓存的元素送出。
var source = interval(300);
var source2 = interval(1000);
var example = source.pipe(buffer(source2));
- bufferCount:用数量来做缓存
- bufferTime:用时间来做缓存
- delay:可以延迟observable 一开始发送元素的时间点
- delayWhen:跟delay 很像,最大的差别是delayWhen 可以影响每个元素,而且需要传一个callback 并回传一个observable
- debounceTime:每次收到元素,他会先把元素cache住并等待一段时间,如果这段时间内已经没有收到任何元素,则把元素送出;如果这段时间内又收到新的元素,则会把原本cache住的元素释放掉并重新计时,不断反覆。
- throttleTime:跟debounce 的不同是throttle 会先开放送出元素,等到有元素被送出就会沉默一段时间,等到时间过了又会开放发送元素。
- distinct:只要有重复出现的值就会被过滤掉。可以传入第二个参数flushes observable 用来清除暂存的资料。
- distinctUntilChanged:只会跟最近一次送出的元素比较,不会每个都比
- catch:处理错误,能接收第二个参数,这个参数会接收当前的observalbe,我们可以回传当前的observable 来做到重新执行
- retry:重新尝试,可以限定次数。
- retryWhen:传入一个callback,通常被用作错误通知。
- repeat:重复订阅,可以限定次数。
- concatAll:他会处理完前一个observable 才会在处理下一个observable
- switch:在新的observable送出后直接处理新的observable不管前一个observable是否完成,每当有新的observable送出就会直接把旧的observable退订(unsubscribe),永远只处理最新的observable!
- mergeAll:能够同时处理所有的observable。可以传入一个数值,这个数值代表他可以同时处理的observable 数量。
- concatMap:concat和map的结合,用在可以确定内部的observable结束时间比外部observable发送时间快的情境,并且不希望有任何并行处理行为,适合少数要一次一次完成到底的的UI动画或特别的HTTP request行为。
- switchMap:switch和map结合,用在只要最后一次行为的结果,适合绝大多数的使用情境。
- mergeMap:用在并行处理多个observable,适合需要并行处理的行为,像是多个I/O 的并行处理。