Angular & Observable 去抖动时间
Angular & Observable debounceTime
在一个 Angular 4 项目中,我有一个函数(我们称它为 reload()
)可以被其他函数调用(我们称它们为 A()
和 B()
) 随时。我想将 reload()
的执行去抖直到从上次调用 A()
或 B()
开始的 X 时间(即毫秒)。我正在查看 Rx.Observable.debounce
和 Rx.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.
您可以将 Subject
与 debounceTime
一起使用。因此,A
和 B
这两个函数都向主题发送一个值。然后去抖动主题流,以便在 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 演示。
在一个 Angular 4 项目中,我有一个函数(我们称它为 reload()
)可以被其他函数调用(我们称它们为 A()
和 B()
) 随时。我想将 reload()
的执行去抖直到从上次调用 A()
或 B()
开始的 X 时间(即毫秒)。我正在查看 Rx.Observable.debounce
和 Rx.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.
您可以将 Subject
与 debounceTime
一起使用。因此,A
和 B
这两个函数都向主题发送一个值。然后去抖动主题流,以便在 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 演示。