gpt4 book ai didi

RxJS takeWhile 但包括最后一个值

转载 作者:行者123 更新时间:2023-12-03 13:21:06 25 4
gpt4 key购买 nike

我有一个 RxJS5 管道看起来像这样

Rx.Observable.from([2, 3, 4, 5, 6])
.takeWhile((v) => { v !== 4 })

我想保留订阅直到看到 4,但我希望最后一个元素 4 也包含在结果中。所以上面的例子应该是
2, 3, 4

然而,根据 official document , takeWhile运营商不包括在内。这意味着当它遇到与我们给出的谓词不匹配的元素时,它会立即完成流,而没有最后一个元素。结果,上面的代码实际上会输出
2, 3

所以我的问题是,我可以实现的最简单方法是什么 takeWhile但也用 RxJS 发出最后一个元素?

最佳答案

从 RxJS 6.4.0 开始,现在可以使用 takeWhile(predicate, true) .

已经有一个开放的 PR 添加了一个可选的 inclusive takeWhile 的参数:https://github.com/ReactiveX/rxjs/pull/4115

至少有两种可能的解决方法:

  • 使用 concatMap() :
    of('red', 'blue', 'green', 'orange').pipe(
    concatMap(color => {
    if (color === 'green') {
    return of(color, null);
    }
    return of(color);
    }),
    takeWhile(color => color),
    )
  • 使用 multicast() :
    of('red', 'blue', 'green', 'orange').pipe(
    multicast(
    () => new ReplaySubject(1),
    subject => subject.pipe(
    takeWhile((c) => c !== 'green'),
    concat(subject.take(1),
    )
    ),
    )

  • 我也一直在使用这个运算符,所以我把它变成了我自己的一组额外的 RxJS 5 运算符: https://github.com/martinsik/rxjs-extra#takewhileinclusive

    这个操作符也在这个 RxJS 5 问题中讨论过: https://github.com/ReactiveX/rxjs/issues/2420

    2019 年 1 月:针对 RxJS 6 更新

    关于RxJS takeWhile 但包括最后一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44641246/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com