2
 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

我需要使用哪个运营商来实现这一目标?

4

1 回答 1

2

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

现在,有两种选择:

  1. 降低debounceTime计时器,但这将导致仅调度最新值,因为去抖动将忽略关闭发出的值
  2. 删除debounceTime运算符并获得您想要的行为

我假设您想要在排放之间进行某种延迟,您可以使用bufferTime在一段时间内收集不同的值,然后使用 mergeAll来展平收集的值

employeeChanged
  .pipe(
    distinctUntilChanged(),
    bufferTime(1000),
    mergeAll()
  )
  .subscribe(key => {
    console.log(`Employee update: ${key}`);
  });
于 2020-01-18T06:25:28.930 回答