代码之家  ›  专栏  ›  技术社区  ›  Picci

在开始事件之后处理事件流,并在结束事件发生时返回侦听

  •  2
  • Picci  · 技术社区  · 7 年前

    我正在处理的场景由3个可观察到的组成。

    斯塔托斯 :当我需要开始一系列的处理时,这个可观察到的发射-发射的数据是 进程 我需要完成的过程

    多斯托布斯 :可见光发射 命令 我必须做点什么-我想在这之后开始听这样的观察 斯塔托斯 已经发射,我需要 进程 履行职责的过程 doTheWork(command, processId)

    恩多布 :当我必须结束某个 进程 必须回去听 斯塔托斯

    所以基本上是: 起点 , 道格斯 直到 终点 然后继续听下一个 起点 .

    也可以保证 起点 迟早会来的 终点 不可能有两个 起点 没有 终点 介于或2之间 终点 没有 开始于 之间。

    前两个步骤可以通过 switchMap ,像

    StartObs
    .switchMap(processId => DoStuff.map(command => ({command, processId})))
    .tap(data => doTheWork(data.command, data.processId))
    

    我不清楚的是如何处理 恩多布 .

    选择使用 takeUntil 不工作,因为我不想完成从 斯塔托斯 因为我得回去听下一个过程才开始。

    1 回复  |  直到 7 年前
        1
  •  3
  •   martin    7 年前

    实际上,我想 takeUntil() 是这里最好的选择 repeat() .

    StartObs
      .switchMap(processId => DoStuff.map(command => ({command, processId})))
      .tap(data => doTheWork(data.command, data.processId))
      .takeUntil(EndObs)
      .repeat();
    

    当链完成时 获取() 它将立即重新订阅感谢 重复() 整个过程将重新开始。