RxJS中的throttleTime与debounceTime之间有什么区别?何时选择哪个?

RxJS中的throttleTime与debounceTime之间有什么区别?何时选择哪个?,rxjs,observable,rxjs-pipeable-operators,Rxjs,Observable,Rxjs Pipeable Operators,我试图理解throttleTime与debounceTime的区别,以及什么时候使用哪一种 我有一个upvote按钮,它向后端发出API请求(计算投票数)。用户可以多次提交按钮,但我想限制每秒按钮可以按下的次数 我知道throttleTime和debounceTime操作符可以这样做,但我应该选择哪一个 const upvoteClicks=fromEvent(this.el.nativeElement,'click') .管道(去BounceTime(500)) .subscribe(()=>

我试图理解
throttleTime
debounceTime
的区别,以及什么时候使用哪一种

我有一个upvote按钮,它向后端发出API请求(计算投票数)。用户可以多次提交按钮,但我想限制每秒按钮可以按下的次数

我知道
throttleTime
debounceTime
操作符可以这样做,但我应该选择哪一个

const upvoteClicks=fromEvent(this.el.nativeElement,'click')
.管道(去BounceTime(500))
.subscribe(()=>this.myService.postpvote(this.postId));

我认为在您的情况下,
throttleTime
工作得更好,因为您希望在用户单击按钮时立即发出api请求

throttleTime
debounceTime
都会忽略同时发生的事件,但是
throttleTime
会立即发出,而
debounceTime
等待额外的延迟

你可以从视觉上很好地看到这一点

此外,本文还对这两个运营商进行了很好的概述。

(一个更简单的答案)

假设用户单击触发请求的按钮(示例):

节流时间=可以限制点击次数,因此每秒只有1次(防止按钮垃圾邮件)

去盎司时间=可以在每个请求通过之前增加延迟(按下按钮,1秒钟内无任何事情发生,然后请求通过)


1秒只是一个例子。您可以在debounceTime()或throttleTime()中输入任何内容-在ms中

虽然这是正确的,但您只解释“何时”而不是“什么”。在OP的示例中,按下按钮表示赞成票或反对票。假设用户在第一篇帖子上投票,并立即改变了主意,投了第二篇帖子/个人/任何东西的票。使用
throttleTime
可以为post 1注册一个like,使用
debounceTime
可以为post 2注册一个like。两种实现都不优于另一种,但要记住这是一个重要的区别。