2017-02-08 58 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