This question already has answers here:
RxJS takeWhile but include the last value
                                
                                    (6个答案)
                                
                        
                12个月前关闭。
            
        

我有以下代码:

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


一旦takeWhile函数返回false,就可以使用pred语句停止流。问题是,我还希望发出那些最终值,以便订阅者可以知道流的最终状态是什么,其中包含诸如status: stoppedstatus: error之类的信息,但随后我希望它在此之后结束。

如果仅在status !== "stopped" || status !== "error"中检查takeWhile,则不会发出该最终事件。

我还应如何纳入最后的比赛?

最佳答案

您使用哪个rxjs版本?

已经有一个带有inclusive last布尔标志的takeWhile重载。

takeWhile(pred, true)


如果您使用的是旧版本,则必须执行其他操作,例如将takeWhile之后的最后一个发出的值压缩

我相信包容性的最后一个是在6.4.0中添加的。

10-06 04:24