延迟触发服务

问题描述 投票:0回答:1

目前我正在使用 Lodash 装饰器来延迟下拉值更改时的服务调用。在选择标签中,我做了如下操作:

(onSelectionChange)="logUserSearchData()"

TypeScript
文件中,我有以下内容:

logUserSearchData() {
   logService();
}

@Debounce(10000)
logService() {
   this.logService().subscribe();
} 

在上面的代码片段中,每当下拉菜单发生变化或值发生变化时,logService()都会在10秒后触发。 RxJS 有没有办法在不使用 Lodash 装饰器的情况下做同样的事情?

angular typescript rxjs angular15
1个回答
0
投票

您必须将代码移至

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();
}
© www.soinside.com 2019 - 2024. All rights reserved.