因此,我使用zip运算符进行了这两个并行调用。我正在打两个网络电话。我有以下问题:
,
有效会话响应1:成功响应2:失败
无效会话响应1:失败响应2:成功
无效会话两个端点都失败
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
}
)发布于 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中的错误
https://stackoverflow.com/questions/66093471
复制相似问题