RxJava - 重复API调用,直到结果完成

Edu*_*bas 2 android rx-java retrofit2 rx-java2

我有一个返回的API FamilyDetails.我使用改造来获取它们,并建模如下:

Observable<FamilyDetails> getFamilyDetails(@Query int personId);
Run Code Online (Sandbox Code Playgroud)

获取后,这些详细信息将用于更新a Person.我的API FamilyDetails会在有一些信息显示时立即提供,这意味着细节可能不完整,因此complete = false当服务器尚未完成获取所有家庭详细信息时,响应中会有一个标记 - 反过来,我的应用程序应该FamilyDetails如果我们complete = false在第一个响应中收到,则发送另一个请求以获取剩余请求,并且只要细节仍然不完整,就继续这样做.

我"有点"实现了我想要的,但不完全是这个代码:

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);
Run Code Online (Sandbox Code Playgroud)

我的personSubscriber返回更新了Person.

我有这个实现的问题是,部分更新不通过personSubscriberonNext(),因为我只得到一个呼叫onNext()与更新Person其完整的对象FamilyDetails.

我想使用RxJava对此进行建模,具有以下要求:

  • 如果我收到不完整的详细信息,我会更新Person 这些详细信息所属的对象,并通过它提供onNext().
  • 如果我们收到不完整的细节,我们继续查询完整的详细信息的API,并提供最新Person通过的物体onNext()同一观察者.
  • 一旦我们onNext()使用更新的最后一次调用Person,然后onComplete()被调用,我们就完成了.

提前致谢!

Joh*_*wUs 8

personApiService.getFamilyDetails(personId)
// repeat call
.repeat()
// until family details are complete
.takeUntil(familyDetails -> familyDetails.isComplete())
//subscribe (do your updates here)
.subscribe(personSubscriber);
Run Code Online (Sandbox Code Playgroud)