2017-02-08 61 views
1

我想設置一個可觀察的流,我將最近的設置值與最後一個進行比較,並且我想根據兩者之間的某些更改進行過濾。我設置一個BehaviorSubject中的服務(角2,如果該事項),並創建函數返回它:用它在組件takeLast似乎殺了可觀察流

getFilters() { 
    return this.filtersSubject.asObservable(); 
} 

然後,我想這樣的:

this.eventFilterService.getFilters() 
    .takeLast(2) 
    .subscribe((data) => console.log(data)); 

但我沒有得到控制檯日誌。如果我刪除takeLast,我會看到我的數據返回。從文檔來看,我的假設是一樣的,它只會觸發兩次。我的目標是將takeLast加入減少然後過濾器。

我用takeLast錯了嗎?

回答

4

takeLast(x)將等待Observable完成後才能發出最後的x排放量。由於您使用的主題需要調用complete()才能正常工作。

但是你真的想計算兩個排放之間的差異。這樣做使用.buffer()操作者

Rx.Observable.from([2,3,5,8]) 
    .bufferCount(2,1) 
    .map(buff => buff[1] - buff[0]) 
    .subscribe(delta => console.log(delta)) 
+2

['buffer'](http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-buffer)採用可觀察到的。我想你會想使用['bufferCount(2,1)'](http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-bufferCount)。 – cartant

+0

你是對的;不應該在通勤時在手機上寫SO回答;-) –

+0

謝謝,我會研究這兩種功能。我假設take也等待緩衝區來完成?這就是爲什麼我討厭Rx文檔......這些例子很糟糕:/我現在意識到完成文檔意味着什麼。 – RhoVisions