2017-06-19 4 views
1

私のアプリケーションには2つのサービスエンドポイントがあります。ab(どちらも「シングル」です)。 bのサービス要求は、aの応答に依存します。 bの応答の後、私は加入者の両方の応答にアクセスする必要があります。私はこのような呼び出しを行うことを計画:RxJavaは、ネットワーク接続要求で以前に観測された結果を取得します

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(); 
}) 

をしかし、ユースケースは、少し複雑につれ、コードは醜いモンスターに進化していきます。あなたはresultSelectorflatMap()のバリアントを使用することができます

答えて

1

resultSelector方法はflatMapの入力(a)と出力(観測可能なBの結果)の両方を収集し、あなたには何が必要にそれらを一緒に組み合わせることができます。 hereを参照してください。

関連する問題