Angular 正确设置throttleTime()运算符

Angular 正确设置throttleTime()运算符,angular,rxjs,Angular,Rxjs,我有一个按钮,其单击事件处理程序设置为函数:get stuff someFunction()执行一些操作,但随后它调用一个执行http get的服务函数 this._myService.getDetails(username).pipe( throttleTime(10000) ).subscribe() 为我服务: getDetails(username: string) { return this._http.get(url); } 这显然不起作用,因为每次

我有一个按钮,其单击事件处理程序设置为函数:
get stuff

someFunction()
执行一些操作,但随后它调用一个执行http get的服务函数

 this._myService.getDetails(username).pipe(
      throttleTime(10000)
).subscribe()
为我服务:

  getDetails(username: string) {
    return this._http.get(url);
  }
这显然不起作用,因为每次我单击按钮时,都会发出一个新的HTTPGET调用


设置类似throttleTime()的功能(http get调用在特定超时长度后发出)的好方法是什么?

您要查找的是运算符

去BounceTime延迟源可观察到的值,但会下降 如果新值到达发动机上,则先前待定的延迟排放 可观测的源。此运算符跟踪最近的值 从可以观察到的源头发出,只有在时间足够的时候才会发出 时间已过,源上未显示任何其他值 可见的。如果在dueTime静音发生之前出现新值,则 先前的值将被删除,并且不会在输出上发出 可见的

请看一个例子


官方的RxJS文档是。

您确实需要一个
节流时间
(请参见下面的比较大理石图)

但是,当前您正在限制响应流,而需要限制按钮单击流

为此,我们可以创建一个按钮点击流:

获取内容
类组件{
btnClickSubject$=新主题();
someFunction(){
此.btnClickSubject$.next(无效0);
}
}
然后将其映射到http get请求:

类组件{
//...
销毁$=新主题();
恩戈尼尼特(){
此.btnClickSubject$.pipe(
//节气门咔哒声
节流时间(3000),
//switchMap或其他*映射运算符切换到http get
switchMap(()=>this.\u http.get('url')),
//完成组件销毁*
takeUntil(此.destroy$)
)
.subscribe(响应=>console.log(响应))
}
恩贡德斯特罗(){
此.destroy$.next(无效0);
}
}
*请注意,我们需要明确告知此订阅以使用组件“onDestroy”完成

--

下面是


希望这有帮助

您是想在每次单击按钮时进行http调用,还是想取消它们的抖动?我希望单击不要在特定时间范围内执行http get if。例如,如果设置为3秒,并且在3秒内多次单击按钮,我只希望第一个按钮通过。我相信我的设置在某个地方出错。它的行为几乎就像每次点击按钮都是一个新的订阅,因此rxjs运营商似乎什么都不做(不管是去BounceTime还是throttleTime)