【问题标题】:tracing specifec zipped Observable error when using Rxjava zip operator使用 Rxjava zip 运算符时跟踪特定的 zipped Observable 错误
【发布时间】:2017-12-26 05:47:55
【问题描述】:

如果我使用 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 方法可以在不中断流的情况下知道这样的事情。

【问题讨论】:

    标签: rx-java rx-java2


    【解决方案1】:

    要知道是哪个 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,解开流名称和原始错误。

    【讨论】:

    • 这是一个很好的答案,谢谢...等待任何其他建议
    猜你喜欢
    • 1970-01-01
    • 2021-05-11
    • 2017-05-11
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多