RxJava获取链式网络请求中先前可观察到的结果

Seb*_*ian 6 java rx-java rx-java2

我的应用程序中有2个服务端点,a并且b(两个都是“ Singles”)。服务请求b取决于的响应a。在响应之后,b我需要访问订户中的两个响应。我打算这样打电话:

services.a()
    .flatMap(a -> services.b(a))
    .subscribe(b ->
        // Access a and b here
    )
Run Code Online (Sandbox Code Playgroud)

但是通过这种方式,我只能访问b订户中的结果。我又如何传递对此的回应a

我的第一个尝试是使用类似这样的东西:

// Note: Code will not compile... Just to show the concept
services.a()
    .flatMap(
        a -> Observable.combineLatest(
                Observable.just(a)
                services.b(a).toObservable()
                Bifunction((a, b) -> {return Pair<ResponseA, ResponseB>(a, b)}))
    )
    .toSingle()
    .subscribe(pair -> {
        ResponseA a = pair.first();
        ResponseB b = pair.second();
    })
Run Code Online (Sandbox Code Playgroud)

但是随着用例变得更加复杂,代码将演变为丑陋的怪物。

yos*_*riz 4

flatMap()您可以使用with的变体resultSelectorresultSelector方法将收集输入(a)和输出(Observable b 的结果),flatMap并且您可以将它们组合在一起以达到您需要的任何效果。看这里