RxJava 获取链式网络请求中先前可观察到的结果
RxJava get result of previous observable in chained network request
我的应用程序中有 2 个服务端点 a
和 b
(均为 "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
方法将收集 [=13= 的输入 (a) 和输出(Observable b 的结果) ] 你可以将它们组合在一起,成为你需要的任何东西。参见 。
我的应用程序中有 2 个服务端点 a
和 b
(均为 "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
方法将收集 [=13= 的输入 (a) 和输出(Observable b 的结果) ] 你可以将它们组合在一起,成为你需要的任何东西。参见