【问题标题】:RxJava - repeat API call until result is completeRxJava - 重复 API 调用直到结果完成
【发布时间】:2017-03-10 20:26:30
【问题描述】:

我有一个返回 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

我在这个实现中遇到的问题是部分更新不会通过personSubscriberonNext(),因为我只收到一个对onNext() 的调用,其中包含更新的Person 对象及其完整的@987654335 @。

我想使用 RxJava 对其进行建模,并满足以下要求:

  • 如果我收到不完整的详细信息,我会更新Person 反对这些详细信息所属,并通过onNext() 传递。
  • 如果我们收到不完整的详细信息,我们会继续查询 API 以获取完整的详细信息,并在同一观察者中通过 onNext() 提供更新的 Person 对象。
  • 一旦我们收到最后一个带有更新的PersononNext() 调用,就会调用onComplete(),我们就完成了。

提前致谢!

【问题讨论】:

    标签: android rx-java retrofit2 rx-java2


    【解决方案1】:
    personApiService.getFamilyDetails(personId)
    // repeat call
    .repeat()
    // until family details are complete
    .takeUntil(familyDetails -> familyDetails.isComplete())
    //subscribe (do your updates here)
    .subscribe(personSubscriber);
    

    【讨论】:

      猜你喜欢
      • 2018-09-22
      • 1970-01-01
      • 1970-01-01
      • 2018-09-11
      • 1970-01-01
      • 2018-06-12
      • 2019-03-28
      • 2019-06-28
      • 1970-01-01
      相关资源
      最近更新 更多