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

时间:2017-03-10 12:04:13

标签: android rx-java retrofit2 rx-java2

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

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

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

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

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

我对此实施所遇到的问题是,部分更新不会通过personSubscriber onNext(),因为我只接到onNext()的一次调用已更新的Person对象及其完整FamilyDetails

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

  • 如果收到不完整的详细信息,我会更新Person 这些详细信息所属的对象,并通过onNext()传递。
  • 如果我们收到不完整的详细信息,我们会不断查询API以获取完整的详细信息,并通过{strong>同一观察员中的Person提供更新的onNext()个对象。
  • 我们使用更新后的onNext()拨打了最后一次Person来电,然后调用了onComplete(),我们就完成了。

提前致谢!

1 个答案:

答案 0 :(得分:6)

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