首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Zip操作符、Rxjava2和Retrofit处理错误

用Zip操作符、Rxjava2和Retrofit处理错误
EN

Stack Overflow用户
提问于 2021-02-07 21:50:24
回答 1查看 113关注 0票数 1

因此,我使用zip运算符进行了这两个并行调用。我正在打两个网络电话。我有以下问题:

  1. 如何正确处理单个错误--
  2. --如果第一次调用失败,我希望能够退出会话,但是如果第二次网络调用失败,我希望允许用户仍然通过会话。我在zip中的第二个网络调用中看到一个404,整个链都失败了。我希望它能够处理成功和失败,

有效会话响应1:成功响应2:失败

无效会话响应1:失败响应2:成功

无效会话两个端点都失败

代码语言:javascript
复制
Single.zip(
api1.getData().doOnError {
    // handle error : exit right away
},
api2.getData().doOnError {
  // handle error: Set profile data to be empty but when user tries to see the profile information show error at a later point in time based oaths response
 // got 404 
},
{ response1: String, response2: CustomObject ->
    Pair(response1, response2)
}
)
.subscribeOn(Schedulers.io())
.subscribe(
    {
        handleResponse1(it.first)
       handleRespone2(it.second)
    },
    {
        Timber.d("it : $it")
       // api1 use success response: is it even possibel to get that in the iterator 
       // api 2 throwing 404 here 
    }
)
EN

回答 1

Stack Overflow用户

发布于 2021-02-11 13:51:26

从您的问题中,我看到您希望继续,即使其中一个API失败而没有失败整个链。这可以通过以下方式完成

如果您想退出第一个API调用,则不需要处理任何错误。(您将在throwable中得到一个错误)。

当第二个API失败时,

  • 使用onErrorReturnItem返回一些空响应

Single.zip( new 1.getData().subscribeOn(Schedulers.io()),new 2.getData().subscribeOn(Schedulers.io()).onErrorReturnItem(新响应()).)

这里的new Response()只是您所期望的类型响应的一个空对象。即使第二个API在这里失败了,您也会得到您要重放的内容。

如果第一个API在这里失败,您将在Throwable中得到一个回调,或者您可以继续处理doOnError中的错误

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66093471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档