使用 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,解包流名称和原始错误。