Rxjs 如何创建一个连接的可观察对象,它会耗尽电流,但总是在电流结束后触发最后一个事件?

Rxjs 如何创建一个连接的可观察对象,它会耗尽电流,但总是在电流结束后触发最后一个事件?,rxjs,observable,ngrx,Rxjs,Observable,Ngrx,我有以下理论问题需要解决,请注意,对于我描述的示例问题,可能有一个更一般的解决方案,但我特别想知道如何创建具有这些属性的连接可观察对象 我可以观察到应该触发保存操作的更改事件(这导致可以观察到保存成功) 我需要确保最后一次保存事件肯定会执行 保存本身是一个复杂的过程,需要一些时间,在保存事件期间,不应执行其他保存操作 使用排气或排气映射几乎可以做到我想要的:它确保在保存过程中不会触发其他事件。 虽然concat或concatMap将确保执行最后一个,但我将执行许多不必要的保存操作 换言之:如何创

我有以下理论问题需要解决,请注意,对于我描述的示例问题,可能有一个更一般的解决方案,但我特别想知道如何创建具有这些属性的连接可观察对象

我可以观察到应该触发保存操作的更改事件(这导致可以观察到保存成功)

  • 我需要确保最后一次保存事件肯定会执行
  • 保存本身是一个复杂的过程,需要一些时间,在保存事件期间,不应执行其他保存操作
  • 使用排气或排气映射几乎可以做到我想要的:它确保在保存过程中不会触发其他事件。 虽然concat或concatMap将确保执行最后一个,但我将执行许多不必要的保存操作


    换言之:如何创建一个可观察到的将在最后一个事件中耗尽和浓缩的事件?

    您可以使用
    节流
    和配置
    前导:真,尾随:真
    来发出第一个事件,然后在可观察到的事件发出之前没有事件,然后在这段时间内接收到最后一个事件。看

    映射到以后要执行的可观察对象(保存操作)。当保存操作完成时,使用
    主题
    完成
    来结束油门间隔

    是否使用
    mergeMap
    exhaustMap
    concatMap
    等映射到内部可观察对象并不重要,因为
    throttle
    操作员仅在内部可观察对象完成时发出下一个事件

    如果使用此逻辑创建自定义运算符函数,则必须使用
    defer
    包装代码,以便不同的订阅者不共享同一主题,而是各自获得自己的新主题

    export function exhaustmap with trailing(
    项目:(值:T,索引:编号)=>可观测输入
    ):运算符函数{
    返回(源):可观察=>延迟(()=>{
    const release=新主题()
    返回源管道(
    节气门(()=>释放,{前导:真,尾随:真}),
    排气图((值,指数)=>来自(项目(值,指数)).管道(
    完成(()=>release.next())
    )(可观察到)
    )
    })
    }
    
    events$.pipe(
    排气图带拖尾(事件=>保存(事件))
    )
    


    此代码在此改编

    您如何识别上次事件?变更事件的可观察性是否在某个时间点完成?我的意思是,在任何时间点,如果没有发生足够长的事件(比保存所需的时间更长),则需要执行可观察事件的最后一个事件,即使它是在正在进行的保存操作期间强制执行的。我只是想确保当前状态最终会被保存,不会因为更改太快而丢失。