2017-06-19 53 views
1

我在我的應用程序中有兩個服務端點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(); 
}) 

但隨着用例變得更復雜一點,代碼將演變爲一個醜八怪。

回答

1

你可以使用flatMap()變體與resultSelectorresultSelector方法收集flatMap的兩個輸入(a)和輸出(可觀察到B的結果)能與您攜手它們結合起來,你需要什麼。見here