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

RxJS:如何发出takeWhile计算为false的事件?

  •  0
  • markovchain  · 技术社区  · 7 年前

    我有以下代码:

    const kickstart$ = curry((pred, iStream, hStream) =>
        iStream()
        .pipe(
            take(1),
            flatMap(({processId: pid}) => poller$(hStream(pid))),
            takeWhile(pred),
            catchError(x => of(x))
        )
    )
    

    这个 takeWhile 语句用于在 pred 函数返回false。问题是,我 而且 希望发出这些最终值,以便订阅者能够知道流的最终状态,其中包含以下信息: status: stopped status: error ,但我想在那之后结束。

    如果我查一下 status !== "stopped" || status !== "error" 在我的 花些时间 ,则最终事件将不会被发射。

    我该如何将最后一项活动也包括在内?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Roberto Zvjerković sabithpocker    7 年前

    哪一个 rxjs 你用什么版本?

    已经有一个takeWhile重载,其中包含 inclusive last .

    takeWhile(pred, true)
    

    如果您使用的是较旧的版本,则必须执行其他操作,例如在使用后浓缩最后一次发射的值 takeWhile

    我相信6.4.0中添加了包含最后一个。