【问题标题】:Rxjava - How to retry an API call with different params while calling two APIs in parallelRxjava - 如何在并行调用两个 API 时重试具有不同参数的 API 调用
【发布时间】:2020-09-28 11:47:39
【问题描述】:

我正在通过以下方式进行两次 API 调用。如果两个 API 调用中的任何一个失败,我想通过更改某些参数来重试该 API。如何做到这一点?

Single.zip(API1.subscribeOn(Schedulers.io()),
                API2.subscribeOn(Schedulers.io()), Bifunction())).subscribe();

【问题讨论】:

    标签: android rx-java2


    【解决方案1】:

    你可以在这里使用 onErrorResumeNext 来处理你的场景。为这两个 API 调用添加一个 onErrorResumeBlock ,它可以使用 diff 参数重试相同的 api。 喜欢:

    Single.zip(API1.subscribeOn(Schedulers.io())
         .onErrorResumeNext { throwable:Throwable ->
         return@onErrorResumeNext API1DIFF_PARAMS },
         API2.subscribeOn(Schedulers.io())
         .onErrorResumeNext { throwable:Throwable ->
         return@onErrorResumeNext API2DIFF_PARAMS }, Bifunction())).subscribe();
    

    缺点是这只会工作一次。如果您的第二个 API 也失败了,那么它将落在您的订阅方法的错误块中

    【讨论】:

    • 如果我想用不同的参数尝试三次或更多次,我实际上可以为一个 API 链接多个 onErrorResumeNext,而不仅仅是一个。没有缺点。如果我错了,请纠正我。
    • 您的 onErrorResume 需要嵌套,这可能难以阅读。
    • onErrorResumeNext 中没有收到 http 401 错误。有没有办法在类似的情况下处理这些问题?
    • 不知道为什么。我可能需要检查一下
    猜你喜欢
    • 2017-05-09
    • 1970-01-01
    • 2021-02-02
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 2016-03-14
    • 2019-10-18
    • 1970-01-01
    相关资源
    最近更新 更多