我正在努力弄清RxJS。特别是在一种情况下,我试图通过过滤器将外部可观测对象的排放通过管道传递给过滤器,该过滤器的内部可观测谓词取决于外部可观测对象的输出。例如:
outerObs.pipe(
filter(x => myPredicate(x))
).subcribe()
其中mypredicate
是一个返回Observable<boolean>
的函数。显然,以上操作不起作用,因为filter
运算符期望boolean
而不是Observable<boolean>
。有没有很好的可移植方法来做到这一点?我尝试查看withLatestFrom
和mergeMap
运算符,但似乎没有任何作用。
答案 0 :(得分:2)
您需要使用*Map
个运算符之一:mergeMap
,exhaustMap
,switchMap
或concatMap
这里有一个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 比较,以选择合适的对象。
希望这会有所帮助