问题描述
我发现一旦单击按钮,就很难使用 Rxjs 对 HTTP 请求实现去抖动。我想要实现的是当按钮被点击时,它应该等待 x 秒,然后发布到服务器。
btnClick() {
this.loader = true;
let send = "";
send = this.checkForm.username.value;
this.checkService
.validate(send)
.pipe(finalize(() => (this.loader = false)))
.subscribe((response) => {
console.log(response)
});
}
解决方法
我会做一些事情,比如从按钮点击事件处理程序调用一个主题来插入一些去抖动时间,然后 switchMap 后调用
btnClicked$: Subject <string> = new Subject<string>();
ngOnInit(): void {
this.btnClicked$.pipe(
debounceTime(500),switchMap((send) => this.checkService.validate(send).pipe(
finalize(() => (this.loader = false)))),take(1)
).subscribe()
}
btnClick(): void {
this.btnClicked$.next(this.checkForm.username.value);
}