关于rxjs操作符的总结(持续更新中)
级联操作
我的理解,级联操作就是下面的操作流依赖上面的操作。上面如果没有传递值给下面,就会报错。下面流会接收上面操作之后的值。
看例子:
import { Observable } from 'rxjs'; |
output=> counter: 3
组合操作
组合操作就是把多个Observable合并成一个流。至于合并之后怎么发射值,每个方法是有区别的。组合方法包括: combineLatest、concat、merge、zip。下面我们分别看下他们的用法:
- combineLatest
它表示组合中以最短时间的流为发射点进行发射,而次于最短时间的其他流取他们的最新值一起发射出来。看例子:// 测试conbineLatest
let source1 = Observable.interval(100)
.map(val => "source1 " + val).take(5);
let source2 = Observable.interval(50)
.map(val => "source2 " + val).take(2);
let stream$ = Observable.combineLatest(
source1,
source2
).subscribe(data => console.log('conbineLatest: ' + data));
output-> > conbineLatest: source1 0 source2 0
conbineLatest: source1 1 source2 1
conbineLatest: source1 2 source2 1
conbineLatest: source1 3 source2 1
conbineLatest: source1 4 source2 1
- concat
它是严格按照流的顺序执行。第一个流执行完,在发射第二个流。
let source1 = Observable.interval(150) |
output:
concat: source1 0
concat: source1 1
concat: source1 2
concat: source1 3
concat: source1 4
concat: source2 0
concat: source2 1
- merge
它合并多个流,每一个流都会按照正常的时序触发。不会受合并影响。看例子:let source1 = Observable.interval(150)
.map(val => "source1 " + val).take(5);
let source2 = Observable.interval(50)
.map(val => "source2 " + val).take(2);
Observable.merge(source1, source2)
.subscribe((data) => console.log('merge: ' + data));
output:
merge: source2 0
merge: source1 0
merge: source2 1
merge: source1 1
merge: source1 2
merge: source1 3
merge: source1 4
- zip
收集每一个流的一次发射,当每个流都发射之后再触发,如果有任何一个流没有值可以发射了,那么本次触发就舍弃了。例子:
// zip |
output:
zip: 1,2,7
zip: 5,3,9
==因为组合之后只能发出两批,所以第二个Observable的4会被舍弃。==