takeLast似乎杀死了可观察的流

时间:2017-02-08 05:37:27

标签: angular rxjs

我试图设置一个可观察的流,我将最近的设定值与最后一个设定值进行比较,我想根据两者之间的某些变化进行过滤。我在服务中设置了一个BehaviorSubject(Angular 2,如果这很重要)并创建了函数来返回它:

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

然后在使用它的组件中,我尝试了这个:

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

但我没有控制台日志。如果我删除takeLast,我会看到我的数据返回。从文档中,我的假设将是原样,它只会发射两次。我的目标是将takeLast提供给reduce然后过滤器。

我使用takeLast是错误的吗?

1 个答案:

答案 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))