如果我有一个使用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方式可以在不打破流的情况下知道这样的事情。
答案 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
});
,解开流名称和原始错误。