【问题标题】:Pipe Filter using Inner Observable Predicate使用内部可观察谓词的管道过滤器
【发布时间】:2019-05-04 04:49:42
【问题描述】:

我正试图了解 RxJS。特别是我有一种情况,我试图通过一个过滤器从外部可观察到的排放,该过滤器具有一个内部可观察谓词,该谓词取决于外部可观察的输出。举例:

outerObs.pipe(
    filter(x => myPredicate(x))
).subcribe()

其中mypredicate 是一个返回Observable<boolean> 的函数。显然,上述内容不起作用,因为filter 运算符期望boolean 而不是Observable<boolean>。有没有一种很好的管道方式来做到这一点?我试过查看 withLatestFrommergeMap 运算符,但似乎没有任何效果。

【问题讨论】:

    标签: rxjs


    【解决方案1】:

    您需要使用*Map 运算符之一:mergeMapexhaustMapswitchMapconcatMap

    这是一个带有concatMap 的示例,它将保证初始发射顺序:

    outerObs.pipe(
      concatMap(x => myPredicate(x).pipe(
        filter(subx => subx == true), // filter by sub value
        mapTo(x)                      // map sub value back to outer value
      ))
    ).subcribe()
    

    查看此mergeMap vs exhaustMap vs switchMap vs concatMap比较以选择合适的。

    希望对你有帮助

    【讨论】:

    • 是的,这就是我所追求的,尽管是一个 mergeMap - 精神上的飞跃正在管道内可观察 :)
    猜你喜欢
    • 2018-08-12
    • 1970-01-01
    • 2019-06-05
    • 1970-01-01
    • 1970-01-01
    • 2020-06-23
    • 2016-11-19
    • 1970-01-01
    • 2020-09-10
    相关资源
    最近更新 更多