使用 Rxjava zip 运算符时跟踪特定的压缩 Observable 错误
tracing specifec zipped Observable error when using Rxjava zip operator
如果我遇到使用 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
,解包流名称和原始错误。
如果我遇到使用 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
,解包流名称和原始错误。