带flaveMap的级联可观察对象(RxJava)

时间:2019-06-05 10:41:17

标签: java android reactjs rx-java

我有一些使用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种方法(在第二种方法中嵌套了第三种方法)

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 个答案:

答案 0 :(得分:2)

第二个过载flatMap占用了输入和输出。然后,您可以将它们合并到Pair中,以发送到下一个flatMap

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