如果我有一个案例,我使用Rxjava zip运算符,让我们说它拉链4个不同的网络调用。例如:
Observable.zip(networkCall1, networkCall2, networkCall3, networkCall4),
(model1, model2, model3, model4) ->
Mapper.getResult(model1, model2, model3, model4)).subscribe(result -> {
//do some work
});
现在,如果错误处理依赖于知道导致此错误的Observable,我怎么能知道抛出错误的特定Observable。是否有任何Rx方式知道这样的事情而不打破流。
要知道哪个observable导致了错误,您需要注释每个observable。
Observable.zip(
networkCall1
.onErrorResumeNext( error -> Observable.error( new IllegalStateException( "stream1", error) ) ),
networkCall2
.onErrorResumeNext( error -> Observable.error( new IllegalStateException( "stream2", error) ) ),
networkCall3
.onErrorResumeNext( error -> Observable.error( new IllegalStateException( "stream3", error ) ) ),
networkCall4
.onErrorResumeNext( error -> Observable.error( new IllegalStateException( "stream4", error ) ) ) ),
(model1, model2, model3, model4) ->
Mapper.getResult(model1, model2, model3, model4)).subscribe(result -> {
//do some work
});
然后,在您的错误处理程序中,处理IllegalStateException
,解开流名称和原始错误。