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

时间:2019-05-03 13:30:24

标签: rxjs

我正在努力弄清RxJS。特别是在一种情况下,我试图通过过滤器将外部可观测对象的排放通过管道传递给过滤器,该过滤器的内部可观测谓词取决于外部可观测对象的输出。例如:

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

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

1 个答案:

答案 0 :(得分:2)

您需要使用*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 比较,以选择合适的对象。

希望这会有所帮助