bufferCount(2,1)似乎返回两次相同的值

时间:2017-02-08 14:54:19

标签: angular rxjs

我有一个Angular 2服务,用于捕获组件中某些输入的更改,并使用BehaviorSubject传递给另一个组件。因为我想将当前值与最后的值进行比较,我想根据另一个SO问题使用bufferCount并将其传递给过滤器。不幸的是,我从bufferCount中获得的行为有点莫名其妙,我无法判断我是否在做出可观察的错误。

我的服务很简单:实例化一个BehaviorSubject,一个函数来提升值,一个函数返回observable:

export class EventFilterService {
    private filtersSubject: BehaviorSubject<Object>;

    constructor() {
        this.filtersSubject = new BehaviorSubject<Object>({
            search: '',
            types: [],
            dates: []
        });
    }

    setFilters(filters: {}) {
        this.filtersSubject.next(filters);
    }

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

在带有输入的组件中,我只是将更新后的值传递给click事件上的setFilters。在我需要数据的组件中,我设置了一个ngOnInit来设置订阅:

ngOnInit() {
    this.eventFilterService.getFilters().bufferCount(2, 1).filter((val:[{}]) => {
        console.log(val[0]['types'] == val[1]['types']);
        return true; 
    }).subscribe((data) => console.log(data));
    this.eventFilterService.getFilters().debounceTime(2500).subscribe((filters) => {
        console.log(filters);
        this.filters = filters;
        this.eventService.getEvents(this.filters).subscribe((data: Event[]) => { this.processEvents(data); });
    });
}

然而,结果很奇怪。在加载时,我得到一个空白的过滤器对象,如预期的那样。过滤器第一次更改时,缓冲区将最后一个值作为空白对象,将当前值作为选择的任何值。但是,在此后的每次更改中,缓冲区返回两个相同的值(前一个状态与当前状态相同,这是正确的)。记录点击事件,我看到它只被点击一次,服务的setFilters方法只被调用一次。

这是我不理解bufferCount如何工作的情况吗?我的设计很糟糕?

这是一个显示我正在推动的行为的plunker link。保持控制台开放,看看我的意思。

0 个答案:

没有答案