首页 > 解决方案 > 如何延迟重置 Observable?

问题描述

我试图弄清楚如何“重置”以前的 Observable 有延迟。我的目标是当我点击一个按钮时,它会运行一个动作;在该操作结束时,等待定义的时间量后,该操作运行finalize以重置一个值。

这是我的意思的Stackblitz。

如果我单击“保存新事件”,它将显示一个数字。3 秒后,数字将消失。问题是,如果我单击它一次,它会开始延迟——但是如果我在 1 秒后再次单击它,它将显示新的数字——但 2 秒后,该数字会从第一个 Observable sets 消失{saveSuccess: null}

有没有一些 RXJS 魔法可以完成我想做的事情?

标签: angularrxjs

解决方案


是的,确实有一些魔法可以取消每次新点击的先前延迟(我认为这就是你所追求的)

您需要Subject在班级级别使用 a,并next在每次点击的主题上使用。subject应该在(或)中设置如下constructorngOnInit操作tap符在管道内

this.subject.pipe(
    switchMap(value => {
        return timer(1000).pipe(...)
    }),
    tap(...)
).subscribe()

switchMap 将在每次后续单击时取消前一个计时器

注意:timer整数值与 a 的作用相同delay,但它本身是可观察的,而不是运算符


推荐阅读