angular - 如何延迟重置 Observable?
问题描述
我试图弄清楚如何“重置”以前的 Observable 有延迟。我的目标是当我点击一个按钮时,它会运行一个动作;在该操作结束时,等待定义的时间量后,该操作运行finalize
以重置一个值。
如果我单击“保存新事件”,它将显示一个数字。3 秒后,数字将消失。问题是,如果我单击它一次,它会开始延迟——但是如果我在 1 秒后再次单击它,它将显示新的数字——但 2 秒后,该数字会从第一个 Observable sets 消失{saveSuccess: null}
。
有没有一些 RXJS 魔法可以完成我想做的事情?
解决方案
是的,确实有一些魔法可以取消每次新点击的先前延迟(我认为这就是你所追求的)
您需要Subject
在班级级别使用 a,并next
在每次点击的主题上使用。subject
应该在(或)中设置如下constructor
,ngOnInit
操作tap
符在管道内
this.subject.pipe(
switchMap(value => {
return timer(1000).pipe(...)
}),
tap(...)
).subscribe()
switchMap 将在每次后续单击时取消前一个计时器
注意:timer
整数值与 a 的作用相同delay
,但它本身是可观察的,而不是运算符
推荐阅读
- java - 将字符串数组分成多个数组
- r - 添加对角线以连接ggplot2中按组组织的配对数据点
- python - 您将如何使用生成器 g 作为参数并返回包含 g 的前 n 个值的列表的 take(g,n)
- python - Flask 在根目录之外提供静态 css 文件
- mongodb - MongoDB docker compose 无法创建用户
- html - Google Drive API 不显示缩略图
- javascript - 如何从数组中排除数组以进行嵌套条件
- r - 在 R 中的两列中获取想要的值
- hyperledger-fabric - 向 Hyperledger Fabric 的本地实例提交事务的问题,在 IBM 区块链平台扩展中为 VSCode 预先配置
- bash - 在扩展模式匹配运算符中包含路径部分