RxJava - 重复 API 调用直到结果完成
RxJava - repeat API call until result is complete
我有一个 API returns FamilyDetails
。我使用 retrofit 来获取它们,它的模型如下:
Observable<FamilyDetails> getFamilyDetails(@Query int personId);
获取后,这些详细信息将用于更新 Person
。我的 API 在有一些信息要显示时立即传递那些 FamilyDetails
,这意味着详细信息可能不完整,因此当服务器没有响应时会传递一个 complete = false
标志' 完成获取所有家庭详细信息 - 反过来,如果我们在第一个响应中收到 complete = false
,我的应用程序应该发送另一个请求以获取剩余的 FamilyDetails
,并且只要详细信息仍然存在,就继续这样做不完整。
我已经 "somewhat" 实现了我想要的,但不完全是用这个代码:
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
returns 一个更新的 Person
。
我在这个实现中遇到的问题是,部分更新不会通过 personSubscriber
的 onNext()
,因为我只收到一次调用 onNext()
更新的 Person
对象及其完整 FamilyDetails
.
我想使用具有以下要求的 RxJava 对此进行建模:
- 如果我收到不完整的详细信息,我会更新
Person
这些详细信息所属的对象,并通过 onNext()
. 传递
- 如果我们收到不完整的详细信息,我们会继续查询 API 以获取完整的详细信息,并通过 同一观察者中的
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);
我有一个 API returns FamilyDetails
。我使用 retrofit 来获取它们,它的模型如下:
Observable<FamilyDetails> getFamilyDetails(@Query int personId);
获取后,这些详细信息将用于更新 Person
。我的 API 在有一些信息要显示时立即传递那些 FamilyDetails
,这意味着详细信息可能不完整,因此当服务器没有响应时会传递一个 complete = false
标志' 完成获取所有家庭详细信息 - 反过来,如果我们在第一个响应中收到 complete = false
,我的应用程序应该发送另一个请求以获取剩余的 FamilyDetails
,并且只要详细信息仍然存在,就继续这样做不完整。
我已经 "somewhat" 实现了我想要的,但不完全是用这个代码:
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
returns 一个更新的 Person
。
我在这个实现中遇到的问题是,部分更新不会通过 personSubscriber
的 onNext()
,因为我只收到一次调用 onNext()
更新的 Person
对象及其完整 FamilyDetails
.
我想使用具有以下要求的 RxJava 对此进行建模:
- 如果我收到不完整的详细信息,我会更新
Person
这些详细信息所属的对象,并通过onNext()
. 传递
- 如果我们收到不完整的详细信息,我们会继续查询 API 以获取完整的详细信息,并通过 同一观察者中的
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);