我有以下示例代码:
interval(500).pipe(
throttleTime(1000)
).subscribe(arg => {
console.log(arg);
});
哪个发出:
0
3
6
...
我知道它每1000毫秒发出一次最新值。我的问题是它会忽略不是最新的值。是否有一个类似于节流时间的运算符,但是保存了这些忽略的值的运算符?我希望它发出:
[0]
[1,2,3]
[4,5,6]
...
编辑:理想情况下,我想要一种可以监听按钮点击的声音。第一次单击时,代码将启动一个计时器,持续N毫秒。用户可以在此期间继续单击。一旦N毫秒结束,操作员将触发一个数组,其中包含在这N毫秒内发生的所有事件。
非常理想,我希望计时器在用户每次单击按钮时重置。
答案 0 :(得分:2)
您可以使用bufferToggle
。它将按照您的要求收集值并以数组形式返回:
const click$ = fromEvent(document, 'click').pipe(
// count emitions
scan(acc => acc += 1, 0)
)
const timerInterval = () => timer(5000);
// buffer emitions to an array. When first click happens 'turn on' buffer
// and when timer ends turn it off.
// throttle used to avoid turning on buffer on every click
click$.pipe(
bufferToggle(
click$.pipe(throttle(timerInterval)),
timerInterval
),
)
.subscribe(console.log)
但是要注意-单击间隔之间没有明确的分隔。例如,用户单击时间可能超过5秒,结果将发生两次发射。
但这更多是您要解决的体系结构任务。