Rxjs的操作符下篇
分組操作符
-
buffer
buffer(breakObservable) 參數(shù)簽名
let breakWhen$ = Rx.Observable.timer(1000); let stream$ = Rx.Observable.interval(200).buffer(breakWhen$); stream$.subscribe(value => console.log(value)); // source會緩存所有的值亡呵,直到所有的值緩存一次輸出 0,1,2,3,4
Buffer意味著我們在等待而不會發(fā)出任何值,直到breakObervable發(fā)生硫戈。
-
bufferTime
基本和buffer的作用是一樣的除了參數(shù)不一樣锰什,buffer傳入的參數(shù)是BreakObservable。然而bufferTime則是以時間作為參數(shù)掏愁,作為緩存的觸發(fā)時機(jī)歇由。
高級參數(shù)
-
Subject
Subject是一個比較特殊的,它即擁有Observer Observable的行為果港。
所以Subject即可以訂閱數(shù)據(jù),也可以發(fā)送數(shù)據(jù)
發(fā)送值
subject.next(1); subject.next(2);
訂閱值
const subscription = subject.subscribe( (value) => console.log(value) )
Subject的對象擁有以下的方法
- next
- error
- complete
- subscribe
- Unsubcribe
通常我們將Subject用來作為代理來使用
let source$ = Rx.Observable.interval(500).take(3); const proxySubject = new Rx.Subject(); let subscriber = source$.subscribe( proxySubject ); proxySubject.subscribe( (value) => console.log('proxy subscriber', value ) ); proxySubject.next( 3 );
存在一個陷阱: proxySubject在沒有被訂閱前 所有調(diào)用的next方法都是無效的糊昙,在訂閱之后的值將優(yōu)先發(fā)出辛掠。
-
ReplaySubject
ReplaySubject的值與Subject唯一不同在于,subject在沒有被訂閱前所有的next方法都是無效的释牺,但是replaySubject其實(shí)有一個可以設(shè)置的緩沖區(qū)間萝衩。
let replaySubject = new Rx.ReplaySubject(2); replaySubject.next(1); replaySubject.next(2); replaySubject.next(3); replaySubject.subscribe(value => console.log(value))
?