你必须知道的6个Rxjs的操做符

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在等待其余流发射数据期间又发射了新数据并且其余流未发送数据,则使用子流最新发射的数据进行合并。

相关文章
相关标签/搜索