如何使用debounceTime获取键可观察的最后一个值

时间:2020-01-17 20:10:53

标签: javascript rxjs rxjs-observables

 employeeChanged: Subject<any> = new Subject<any>();
 setInterval(() => {
     this.employeeChanged.next(1);
     this.employeeChanged.next(1);
     this.employeeChanged.next(2);
     this.employeeChanged.next(2);
     this.employeeChanged.next(3);
     this.employeeChanged.next(3);
 },1000);

 this.employeeChanged.pipe(debounceTime(1000),distinctUntilChanged()).subscribe(((key) => {
            console.log(`Employee update: ${key}`);
 }));

我的示例如下所示。我想按观察对象提供的键获取最新值,因此我的输出看起来像这样

Employee update: 1
Employee update: 2
Employee update: 3

我需要使用哪个运算符来实现?

1 个答案:

答案 0 :(得分:2)

由于您在debounceTimesetInterval延迟中使用了相同的值,因此debounceTime时间跨度不会过去,也不会发出任何值。

现在,有两个选项:

  1. 减少debounceTime计时器,但由于去抖动会忽略近距离发射的值,因此只会分派最新值
  2. 删除debounceTime运算符并获得所需的行为

我假设您希望排放之间有某种延迟,您可以使用bufferTime收集一段时间内的不同值,然后使用mergeAll来平坦化收集的值

employeeChanged
  .pipe(
    distinctUntilChanged(),
    bufferTime(1000),
    mergeAll()
  )
  .subscribe(key => {
    console.log(`Employee update: ${key}`);
  });