处理Zip操作符,Rxjava2和Retrofit的错误



所以我有这两个并行调用使用zip操作符。我正在打两个网络电话。我有以下问题:

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

有效的会话回应1:成功响应2:failure

无效的会话响应1:失败响应2:success

无效的会话两个端点都失败

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 
}
)

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

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

  • 当第二个API失败时,使用onErrorReturnItem返回一些空响应

    Single.zip(
    api1.getData().subscribeOn(Schedulers.io()),
    api2.getData().subscribeOn(Schedulers.io())
    .onErrorReturnItem(new Response())
    .......
    

这里的new Response()只是您所期望的响应类型的空对象。即使第二个API在这里失败,您也将获得返回的内容

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

相关内容

最新更新