使用内部可观察谓词的管道过滤器



我正试图了解RxJS。特别是,我遇到一种情况,即我试图通过具有内部可观察谓词的过滤器来管道来自外部可观察量的排放,该过滤器依赖于外部可观察量的输出。举例来说:

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

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

您需要使用*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()

请参阅此合并映射与排气映射与开关映射与连接映射比较以选择正确的一个。

希望这有帮助

最新更新