2017-03-10 9 views
0

私はFamilyDetailsを返すAPIを持っています。私はそれらを取得するために改造を使用して、以下のように、それがモデル化されていますRxJava - 結果が完了するまでAPIコールを繰り返す

Observable<FamilyDetails> getFamilyDetails(@Query int personId); 

フェッチすると、それらの詳細はPersonを更新するために使用されます。私のAPIは、いくつかの情報が表示されるとすぐにこれらのメッセージを配信します。つまり、詳細が不完全である可能性があるため、サーバがすべてのファミリ詳細の取得を完了していないときに応答としてcomplete = falseフラグが返されます。アプリは最初の応答でcomplete = falseを受け取った場合に残りのFamilyDetailsを取得する別のリクエストを送信する必要があります。詳細が不完全なままである限り、そのまま続けます。

私は「やや」ではなく、完全にこのコードで、私が望んで達成した:

personApiService.getFamilyDetails(personId) 
    // repeat call 
    .flatMap(familyDetails -> personApiService.getFamilyDetails(personId)) 
    // until family details are complete 
    .takeUntil(familyDetails -> familyDetails.isComplete()) 
    // update the person object with the family details 
    .flatMap(familyDetails -> Observable.just(updatePerson(familyDetails)) 
    //subscribe! 
    .subscribe(personSubscriber); 

マイpersonSubscriber戻っ更新Personが。

私はこの実装を持っている問題は、私が唯一の完全なFamilyDetailsで更新PersonオブジェクトとonNext()への呼び出しを1つ取得するよう部分的な更新は、personSubscriberonNext()を通過していないということです。

私は、次の要件をRxJavaを使用してこれをモデル化したいと思います:私は不完全な内容を受信した場合、私はそれらの詳細はに属し、onNext()を経由してお届けPerson オブジェクトを更新

  • 不完全な詳細が表示された場合は、APIに完全な詳細を問い合わせておき、PersonオブジェクトをonNext()の同じオブザーバーに配信します。
  • onNext()が更新されてPersonに更新されると、onComplete()が呼び出され、完了します。

ありがとうございます!

答えて

2
personApiService.getFamilyDetails(personId) 
// repeat call 
.repeat() 
// until family details are complete 
.takeUntil(familyDetails -> familyDetails.isComplete()) 
//subscribe (do your updates here) 
.subscribe(personSubscriber); 
+0

繰り返し...もちろんありがとう! –

関連する問題