Rxjs 如何创建一个连接的可观察对象,它会耗尽电流,但总是在电流结束后触发最后一个事件?
我有以下理论问题需要解决,请注意,对于我描述的示例问题,可能有一个更一般的解决方案,但我特别想知道如何创建具有这些属性的连接可观察对象 我可以观察到应该触发保存操作的更改事件(这导致可以观察到保存成功)Rxjs 如何创建一个连接的可观察对象,它会耗尽电流,但总是在电流结束后触发最后一个事件?,rxjs,observable,ngrx,Rxjs,Observable,Ngrx,我有以下理论问题需要解决,请注意,对于我描述的示例问题,可能有一个更一般的解决方案,但我特别想知道如何创建具有这些属性的连接可观察对象 我可以观察到应该触发保存操作的更改事件(这导致可以观察到保存成功) 我需要确保最后一次保存事件肯定会执行 保存本身是一个复杂的过程,需要一些时间,在保存事件期间,不应执行其他保存操作 使用排气或排气映射几乎可以做到我想要的:它确保在保存过程中不会触发其他事件。 虽然concat或concatMap将确保执行最后一个,但我将执行许多不必要的保存操作 换言之:如何创
换言之:如何创建一个可观察到的将在最后一个事件中耗尽和浓缩的事件?您可以使用
节流
和配置前导:真,尾随:真
来发出第一个事件,然后在可观察到的事件发出之前没有事件,然后在这段时间内接收到最后一个事件。看
映射到以后要执行的可观察对象(保存操作)。当保存操作完成时,使用主题
和完成
来结束油门间隔
是否使用mergeMap
、exhaustMap
、concatMap
等映射到内部可观察对象并不重要,因为throttle
操作员仅在内部可观察对象完成时发出下一个事件
如果使用此逻辑创建自定义运算符函数,则必须使用defer
包装代码,以便不同的订阅者不共享同一主题,而是各自获得自己的新主题
export function exhaustmap with trailing(
项目:(值:T,索引:编号)=>可观测输入
):运算符函数{
返回(源):可观察=>延迟(()=>{
const release=新主题()
返回源管道(
节气门(()=>释放,{前导:真,尾随:真}),
排气图((值,指数)=>来自(项目(值,指数)).管道(
完成(()=>release.next())
)(可观察到)
)
})
}
events$.pipe(
排气图带拖尾(事件=>保存(事件))
)
此代码在此改编您如何识别上次事件?变更事件的可观察性是否在某个时间点完成?我的意思是,在任何时间点,如果没有发生足够长的事件(比保存所需的时间更长),则需要执行可观察事件的最后一个事件,即使它是在正在进行的保存操作期间强制执行的。我只是想确保当前状态最终会被保存,不会因为更改太快而丢失。