我有一个返回 FamilyDetails
的API。我使用翻新来获取它们,并将其建模如下:
Observable<FamilyDetails> getFamilyDetails(@Query int personId);
获取后,这些详细信息将用于更新Person
。我的API一旦显示一些信息要显示,就会提供这些FamilyDetails
,这意味着细节可能不完整,因此,当服务器尚未完成所有访问所有家庭详细信息时,在响应中提供了一个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
。
我在此实现方面遇到的问题是,部分更新不会通过personSubscriber
的onNext()
,因为我只接到一个带有完整FamilyDetails
的Person
对象的onNext()
调用。
我想使用RXJAVA对此进行建模,并具有以下要求:
- 如果我收到不完整的详细信息,请更新
Person
这些细节属于并通过onNext()
。
进行交付 - 如果我们收到不完整的详细信息,我们会继续向API查询以了解完整的详细信息,并通过 in 中的
onNext()
进行更新的Person
对象。- 一旦我们获得了更新的
Person
的最后一个onNext()
调用,然后将onComplete()
调用,我们完成了。 - 一旦我们获得了更新的
预先感谢!
personApiService.getFamilyDetails(personId)
// repeat call
.repeat()
// until family details are complete
.takeUntil(familyDetails -> familyDetails.isComplete())
//subscribe (do your updates here)
.subscribe(personSubscriber);