2017-10-02 12 views
0

3つのHTTPサービスを非同期的に呼び出すことによって結果オブジェクトをアセンブルしようとしています。各サービスは異なるフィールドを返します。3つの非同期呼び出しのJava rxアセンブル結果オブジェクト

どのように達成できますか?

私はこのようなものがあります:

結果OBJ

public class ResultObj { 
    int resStudents; 
    int resClasses; 
    int resGrades; 
} 

方法

 ResultObj result = new ResultObj(); 


Observable.merge(studentService.fetchTotal(), classesService.fetchTotal(), gradesService.fetchTotal()) 
       .toBlocking(); 

今何を? どのように各結果を取得し、適切なフィールドにResultObjに設定するのですか?(クラスの結果は生徒のための結果となります)。

今のところ、各フェッチコールは、乱数のObservalbleを再実行します。

よろしく、イド

答えて

0

あなたはCombineLatestlookを取る必要があります。

Observable.combineLatest(
    studentService.fetchTotal(), 
    classesService.fetchTotal(), 
    gradesService.fetchTotal(), 
    (studentTotal, classesTotal, gradesTotal) -> { 
     // do your stuff 
     return studentTotal + classesTotal + gradesTotal; 
    }) 
    .subscribe(
     total -> System.out.println(total) 
    ) 
); 
+0

これは並列実行されません。私は最初の呼び出しで睡眠をとって、プリントを記録しますが、彼らはセリエイティに走っています。 –

関連する問題