基于逻辑的 RxJava 重试



在这种情况下,我有一个使用 Retrofit 的 API 调用,该调用可能由于网络错误而失败。如果失败,我们将显示带有重试按钮的错误消息。当用户按下重试按钮时,我们需要再次重试最新的可观察对象。

可能的解决方案:

    重试:在订阅
  1. 可观察量之前应该使用重试,如果发生错误,它会立即再次重新订阅,这是我不想要的,我只需要在用户按下重试按钮时才需要重新订阅。

  2. 重试时间:当您发出项目时,它会继续尝试,直到您发出可观察错误,然后它将停止。同样的问题,除非用户决定,否则我不需要启动重试过程。

  3. 重新订阅相同的可观察量
  4. :此解决方案将开始发出可观察量项目,这样做的问题是我们正在使用缓存运算符,因此,如果一个可观察量失败,我们会缓存失败的项目,当我们再次订阅时,我们再次收到相同的错误。

还有其他解决方案吗?

您可以使用 retryWhen,该参数 - Func1 返回一个 Observable,指示何时应该进行重试。例如:

PublishSubject<Object> retryButtonClicked = PublishSubject.create();
Observable
        .error(new RuntimeException())
        .doOnError(throwable -> System.out.println("error"))
        .retryWhen(observable -> observable.zipWith(retryButtonClicked, (o, o2) -> o))
        .subscribe();
retryButtonClicked.onNext(new Object());

每次重试按钮单击事件时,将重试可观察

这里还有一个例子 - https://gist.github.com/benjchristensen/3363d420607f03307dd0

相关内容

  • 没有找到相关文章

最新更新