Javascript 如何在RxJS中基于点击持续采样数据?
我有一个可以观察到的有趣数据,这些数据随着时间的推移而变化(Javascript 如何在RxJS中基于点击持续采样数据?,javascript,rxjs,Javascript,Rxjs,我有一个可以观察到的有趣数据,这些数据随着时间的推移而变化(BehaviorSubject): const obs=。。。 然后我有一个单击操作(主题,按下按钮后调用.next()): const clickAction=。。。 我希望这样做: obs.pipe(示例(单击操作)).subscribe(数据=>console.log(数据)) 我遇到的问题是:当我连续多次单击按钮时,它只会将消息记录一次到控制台。如果obs发生更改,则再次单击将再次登录到控制台 预期行为:每次单击按钮时,也
BehaviorSubject
):
const obs=。。。
然后我有一个单击操作(主题
,按下按钮后调用.next()
):
const clickAction=。。。
我希望这样做:
obs.pipe(示例(单击操作)).subscribe(数据=>console.log(数据))
我遇到的问题是:当我连续多次单击按钮时,它只会将消息记录一次到控制台。如果obs
发生更改,则再次单击将再次登录到控制台
预期行为:每次单击按钮时,也应记录数据(无论是否已更改)
我原以为sample
应该这样做,但我认为一定有更好的方法来做到这一点?在您的案例中不起作用,因为:
sample
查看可观察到的源,并发出它所发出的值
自上次采样以来最近发出的,,除非
自上次采样以来,震源未发出任何信号
最晚从 用于将单击事件与源可观测的最新发射值组合
clickAction.pipe(
withLatestFrom(obs),
map(([notifier, source]) => source)
).subscribe(console.log)
我最终实现了以下目标:
导出函数时(通知程序:可观察):MonoTypeOperatorFunction{
返回(来源:可观察)=>{
const latest=withLatestFrom(源)(通知程序)
常量映射器=映射(([源]:[任何,T])=>源)
返回映射器(最新版本)
}
}
可以这样使用:
obs.pipe(在(单击操作时))
您是否尝试了obs
和示例(单击操作)
?此外,有一些代码将有助于我们找到更好的方法。