你必須知道的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在等待其餘流發射數據期間又發射了新數據並且其餘流未發送數據,則使用子流最新發射的數據進行合併。

相關文章
相關標籤/搜索