我试图找出如何“重置”具有延迟的先前Observable的方法。我的目标是,当我单击一个按钮时,它会执行一个操作;该操作结束后,等待了一段指定的时间后,该操作将运行finalize
以重置一个值。
Here is a Stackblitz of what I mean.
如果我单击“保存新事件”,它将显示一个数字。 3秒钟后,数字将消失。问题是,如果我单击一次,它将启动延迟;但是,如果在1秒钟后再次单击它,它将显示新的数字;但是2秒后,该数字将消失,因为第一个可观察的集合{ {1}}。
是否有一些RXJS魔术可以完成我想做的事情?
答案 0 :(得分:6)
是的,确实有一些魔术可以取消每次新点击的前一次延迟(我想这就是您想要的)
您需要在班级使用Subject
,并且每次单击都在主题上使用next
。 subject
应该在constructor
(或ngOnInit
)中进行如下设置,并在 pipe
tap
运算符
this.subject.pipe(
switchMap(value => {
return timer(1000).pipe(...)
}),
tap(...)
).subscribe()
switchMap将在每次后续单击时取消上一个计时器
注意:具有整数值的timer
与delay
的工作原理相同,但它本身是可观察的,而不是运算符