Angular & Observable 去抖动时间

Angular & Observable debounceTime

在一个 Angular 4 项目中,我有一个函数(我们称它为 reload())可以被其他函数调用(我们称它们为 A()B()) 随时。我想将 reload() 的执行去抖直到从上次调用 A()B() 开始的 X 时间(即毫秒)。我正在查看 Rx.Observable.debounceRx.Observable.debounceTime 函数,但我不明白它们是否真的可以帮助我。

一个例子:

time 0ms: A() gets executed and it calls reload()
time 200ms: B() calls executed and it calls reload()
Since X is set to 500ms, reload() should be called only once and after 500ms.

您可以将 SubjectdebounceTime 一起使用。因此,AB 这两个函数都向主题发送一个值。然后去抖动主题流,以便在 x 时间过去后仅发出值。

// component.ts
subject$ = new Subject();
stream$;

constructor(){
    this.stream$ = this.subject$.debounceTime(1000);
}

A(){
    this.subject$.next('some value');
}
B(){
    this.subject$.next('some value');
}

ngOnInit(){
    this.stream$.subscribe(res => {
        this.reload();
    });
}

这是一个 stack blitz 演示。