

ReactiveXで非同期通信の直列化と結果の合成をどうやるか、教えてほしいです。

  1. apiAを叩く
  2. apiAが成功したらapiAの結果をparameterとしてapiBを叩く
  3. apiBが成功したらapiAとapiBの結果をparameterとしてapiCを叩く

rxswiftを使っていますが、概念としては同じだと思うので特定の言語はタグ指定していません。

現在下記のように各種非同期通信をObservableで返すfunctionが実装されています。  
それらをどう利用するかを教えてほしいです

[code]

    func requestApiA() -> Observable<ResponseA> { /* 略　*/ }
    func requestApiB(parameterA: ResponseA) -> Observable<ResponseB> { /* 略　*/ }
    func requestApiC(parameterA: ResponseA, parameterB: ResponseB) -> Observable<ResponseC> { /* 略　*/ }
    
[/code]


CC BY-SA 3.0
2018-03-30T11:03:55.627
42794
2018-03-30T13:44:02.003
2018-03-30T11:27:24.710
19110
427
question
reactive-programming reactivex
ReactiveXで非同期通信の直列化と結果の合成をどうやるか


各Observableが1回のみ結果を返すものとして回答します。

[code]

    let request = requestApiA().flatMap { resA in
        requestApiB(parameterA: resA).flatMap { resB in 
            requestApiC(parameterA: resA, parameterB: resB) 
        }
    }
    
[/code]

こうしてObservableを組み立てればOKです。  
あとはsubscribeするなりすれば実行されます。

[code]

    request.subscribe(...)
    
[/code]


CC BY-SA 3.0
2018-03-30T13:25:20.613
42801
2018-03-30T13:44:02.003
2018-03-30T13:44:02.003
915
915
42794
answer