Объединенные наблюдаемые (RxJava) с flapMap - PullRequest
0 голосов
/ 05 июня 2019

У меня есть несколько связанных наблюдаемых с использованием flatMap, таких как

api.call1()
.flatMap{a-> api.call2(a)}
.flatMap{b-> api.call3(a,b) //<- no access to a}

проблема в том, что при третьем каскадном вызове мне нужно то, что я получил от предыдущего, а также результат первого

это схема: A -> (a) -> B -> (b) -> C (необходимо b , но также a ) -> ...

Я пытаюсь решить это так:

1 подход (вложенный 3-й наблюдаемый внутри 2-го)

api.call1()
    .flatMap{a-> api.call2(a).flatMap{b-> api.call3(a,b)}}

это работает, но я знаю, что это не очень хороший подход (из-за передачи parms извне трубы)

2 подход (лучше, но много шаблонного)

api.call1().flatMap{ a-> 
    Observable.combineLatest(Observable.just(a),api.call2(a),
          BiFunction{  a,b -> Pair(a,b)})
           .flatMap(pair:Pair<A,B> -> api.call3(pair.first,pair.second))
}}

кто-нибудь знает лучший подход (какой-то оператор моды)

Спасибо всем извините за мои бедные англ.

1 Ответ

2 голосов
/ 05 июня 2019

Существует вторая перегрузка flatMap, которая принимает и вход, и выход. Затем вы можете объединить их в Pair для отправки на следующий flatMap

api.call1()
    .flatMap( 
        { a -> api.call2(a) },
        { a, b -> new Pair(a, b) }
    )
    .flatMap { pair-> api.call3(pair.first, pair.second) }
...