我试图设置一个可观察的流,我将最近的设定值与最后一个设定值进行比较,我想根据两者之间的某些变化进行过滤。我在服务中设置了一个BehaviorSubject(Angular 2,如果这很重要)并创建了函数来返回它:
getFilters() {
return this.filtersSubject.asObservable();
}
然后在使用它的组件中,我尝试了这个:
this.eventFilterService.getFilters()
.takeLast(2)
.subscribe((data) => console.log(data));
但我没有控制台日志。如果我删除takeLast
,我会看到我的数据返回。从文档中,我的假设将是原样,它只会发射两次。我的目标是将takeLast
提供给reduce然后过滤器。
我使用takeLast是错误的吗?
答案 0 :(得分:7)
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))