gpt4 book ai didi

retrofit - RxJava基于逻辑的重试

转载 作者:行者123 更新时间:2023-12-02 22:10:55 26 4
gpt4 key购买 nike

情况是这样的,我有一个使用 Retrofit 的 API 调用,可能会由于网络错误而失败。如果失败,我们将显示一 strip 有重试按钮的错误消息。当用户按下重试按钮时,我们需要再次重试最新的 Observable。

可能的解决方案:

  1. 重试:应该在订阅可观察对象之前使用重试,如果发生错误,它将立即重新订阅,而这是我不想要的,只有当用户按下“重试”按钮时,我才需要重新订阅。

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

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

还有其他解决方案吗?

最佳答案

您可以使用 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());

每次 retryButtonClicked 发出事件时,Observable 都会重试

这也是一个示例 - https://gist.github.com/benjchristensen/3363d420607f03307dd0

关于retrofit - RxJava基于逻辑的重试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30839858/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com