目前我正在使用 Lodash 装饰器来延迟下拉值更改时的服务调用。在选择标签中,我做了如下操作:
(onSelectionChange)="logUserSearchData()"
在
TypeScript
文件中,我有以下内容:
logUserSearchData() {
logService();
}
@Debounce(10000)
logService() {
this.logService().subscribe();
}
在上面的代码片段中,每当下拉菜单发生变化或值发生变化时,logService()都会在10秒后触发。 RxJS 有没有办法在不使用 Lodash 装饰器的情况下做同样的事情?
您必须将代码移至
ngOnInit
钩子,然后使用debounceTime
的rxjs
来执行去抖动操作。
我们使用主题来发出值,这些值将在
ngOnInit
上接收并进行去抖。
private subject: Subject<void> = new Subject<void>();
private sub: Subscription = new Subscription();
ngOnInit() {
this.sub.add(
this.subject.pipe(
debounceTime(500),
switchMap(() => this.logService()), // <- switches to the inner observable and discards still running operations of the method.
).subscribe()
);
}
ngOnDestroy() {
this.sub.unsubscribe();
}