1.Concatajax
const getPostOne$ = Rx.Observable.timer(3000).mapTo({id: 1}); const getPostTwo$ = Rx.Observable.timer(1000).mapTo({id: 2}); Rx.Observable.concat(getPostOne$, getPostTwo$).subscribe(res => console.log(res));
合并多个observables,当你一次性subscribe的时候,次操做符会合并多个observable的结果到输出的obserable中。数组
若是你的关注点在于输出的顺序的状况下,能够使用此操做符。好比当你须要按顺序发送ajax请求的时候能够使用此操做符。并发
2.forkJoinpost
forkJoin是Promise.all()方法的Rx版本。spa
const getPostOne$ = Rx.Observable.timer(1000).mapTo({id: 1}); const getPostTwo$ = Rx.Observable.timer(2000).mapTo({id: 2}); Rx.Observable.forkJoin(getPostOne$, getPostTwo$).subscribe(res => console.log(res))
// 打印[{id: 1}, {id: 2}]
当你须要并发的运行observable的时候使用此操做符。code
3.mergeMapblog
const post$ = Rx.Observable.of({id: 1}); const getPostInfo$ = Rx.Observable.timer(3000).mapTo({title: "Post title"}); const posts$ = post$.mergeMap(post => getPostInfo$).subscribe(res => console.log(res));
首先说下Rx中的两个术语:事件
1.source observable 这里指的是post$ip
2.inner observable 这里指的是getPostInfo$get
当inner observable发出值得时候,合并值到输出的observable中。
4.pairWise
// Tracking the scroll delta Rx.Observable .fromEvent(document, 'scroll') .map(e => window.pageYOffset) .pairwise() .subscribe(pair => console.log(pair)); // pair[1] - pair[0]
把当前的值和上一个值做为数组输出。如上示例当触发scroll事件的时候能够输出[10, 11] [11, 12] [12, 13]...
5.switchMap
const clicks$ = Rx.Observable.fromEvent(document, 'click'); const innerObservable$ = Rx.Observable.interval(1000); clicks$.switchMap(event => innerObservable$) .subscribe(val => console.log(val));
在这个示例中,每当点击document的时候以前的interval的subscription会被取消而且会开始一个新的值。
6.combineLatest
const clicks$ = Rx.Observable.fromEvent(document, 'click'); const innerObservable$ = Rx.Observable.interval(1000); clicks$.switchMap(event => innerObservable$) .subscribe(val => console.log(val));
若是子流a在等待其余流发射数据期间又发射了新数据并且其余流未发送数据,则使用子流最新发射的数据进行合并。