角度缓冲区事件,然后在不活动延迟后执行一些操作

时间:2018-10-12 08:51:54

标签: angular rxjs

我一直在寻找一种实现以下内容的有角度的方式。

某个时候,某个事件将开始发送垃圾邮件。我想捕获所有这些调用,并且在停止垃圾邮件发送(由某个时间间隔定义,例如1秒内没有调用)后,我想得到通知并调用一个函数。我对事件的结果不感兴趣,只是对例如没有发生任何事件的通知感兴趣。 1秒。

如果再次开始发送垃圾邮件,则该过程应重新开始。

我研究了可观察对象的缓冲区,但是没有找到适合情况的缓冲区,大多数缓冲区事件直到满足条件为止(达到timout,设置变量)。

我知道我可以通过在每次事件发生时重置计时器并在计时器达到我感兴趣的时间间隔时抛出事件来实现此目的。

我觉得用rxjs / angular可以找到一种更优雅的方法,但我没有看到。

1 个答案:

答案 0 :(得分:0)

您可以使用事件垃圾邮件来重置主题

export class Q52775767Component {
  private resetSubject$ = new Subject();

  constructor() {
    // first event spammer
    timer(0, 1000)
      .pipe(take(10))
      .subscribe(next => {
        console.log('event spammer ' + next);
        this.resetSubject$.next(void 0);
      });

    // second event spammer starts after 15 seconds
    timer(15000, 1000).subscribe(next => {
      console.log('event spammer 2 ' + next);
      this.resetSubject$.next(void 0);
    });

    // This subject emits if no "spam" was received
    this.resetSubject$
      .pipe(
        switchMap(() => timer(2000, 1000)) // wait for a two seconds "hole" then emit each second
      )
      .subscribe(() => this.targetFunction());
  }

  targetFunction() {
    console.log('Target reached');
  }
}