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

services.a()
    .flatMap(a -> services.b(a))
    .subscribe(b ->
        // Access a and b here
    )

但是以这种方式,我只能在我的订户中访问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();
    })

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

最佳答案

您可以将flatMap()resultSelector一起使用,resultSelector方法将同时收集flatMap的输入(a)和输出(Observable b的结果),并且可以将它们组合在一起以形成所需的内容。参见here

关于java - RxJava在链式网络请求中获取先前可观察到的结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44623505/

10-09 07:56
查看更多