Трубный фильтр с использованием внутреннего наблюдаемого предиката - PullRequest
2 голосов
/ 03 мая 2019

Я пытаюсь разобраться с RxJS.В частности, у меня есть ситуация, когда я пытаюсь передать выбросы из внешней наблюдаемой через фильтр, который имеет внутренний наблюдаемый предикат, который зависит от выходных данных внешней наблюдаемой.В качестве примера:

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

, где mypredicate - это функция, которая возвращает Observable<boolean>.Очевидно, что вышеприведенное не работает, поскольку оператор filter ожидает boolean, а не Observable<boolean>.Есть ли хороший способ сделать это?Я пытался посмотреть на операторы withLatestFrom и mergeMap, но, похоже, ничего не работает.

1 Ответ

2 голосов
/ 03 мая 2019

Вам нужно будет использовать один из операторов *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 и ExakMap с SwitchMap против ConcatMap , чтобы выбрать правильный.

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...