跟踪specifec zipped使用Rxjava zip运算符时出现Observable错误

时间:2017-12-25 21:32:28

标签: rx-java rx-java2

如果我有一个使用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方式可以在不打破流的情况下知道这样的事情。

1 个答案:

答案 0 :(得分:3)

要知道哪个observable导致错误,您需要注释每个observable。

 Benchmark                Mode  Cnt      Score   Error  Units
 Loop.full        avgt    2     ≈ 10⁻⁷          ms/op
 Loop.minusOne    avgt    2     ≈ 10⁻⁶          ms/op
 Loop.withoutAll  avgt    2  51782.751          ms/op
 Loop.withoutC2   avgt    2   1699.137          ms/op 

然后,在错误处理程序中,处理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 }); ,解开流名称和原始错误。