Rx java Observable.concatDelayError()有条件地继续

Rx java Observable.concatDelayError()有条件地继续,rx-java,rx-android,Rx Java,Rx Android,我有一个可观察对象的列表,我目前通过Observable.concatDelayError()订阅了该列表。我的要求已更改,因此我现在希望有条件地延迟错误 如果一个可观测数据发出错误,我想在那一点上决定是否允许剩余的可观测数据继续或序列终止 一个用例是,如果错误类型为TimeoutException,那么我将中止剩余的可观察项;否则,我继续剩下的观测值。理想情况下,无论我是中止还是继续出错,我仍然希望在最后报告错误,因为concatDelayError()当前的行为 我想我是在寻找这样的东西:可

我有一个
可观察对象的列表,我目前通过
Observable.concatDelayError()
订阅了该列表。我的要求已更改,因此我现在希望有条件地延迟错误

如果一个可观测数据发出错误,我想在那一点上决定是否允许剩余的可观测数据继续或序列终止

一个用例是,如果错误类型为
TimeoutException
,那么我将中止剩余的可观察项;否则,我继续剩下的观测值。理想情况下,无论我是中止还是继续出错,我仍然希望在最后报告错误,因为
concatDelayError()
当前的行为


我想我是在寻找这样的东西:
可观察的.concatDelayError(可观察的源,Func1谓词)
编辑:

保存非超时错误更为复杂:

PublishSubject<Object> timeout = PublishSubject.create();

Observable.from(sources).concatMapDelayError(v -> v.onErrorResumeNext(e -> {
    if (e instanceof TimeoutException) {
        timeout.onError(e);
        return Observable.empty();
    }
    return Observable.error(e);
}))
.takeUntil(timeout)
.subscribe(...);
PublishSubject超时=PublishSubject.create();
可观察。来自(来源)。concatMapDelayError(v->v.onErrorResumeNext(e->{
if(例如TimeoutException的实例){
超时。onError(e);
return-Observable.empty();
}
返回可观测误差(e);
}))
.takeUntil(超时)
.认购(……);

谢谢@akarnokd。这很有效,除了最后我需要知道是否发生了任何错误。因此,如果抛出TimeoutException,我想中止流;如果抛出任何其他错误,我希望流继续,但最后知道遇到了错误。更新了答案。最优秀@akarnokd。太棒了!一个附带的问题:在超时情况下返回
Observable.empty()
有什么好处吗?当删除时,事情仍然像预期的那样工作——IF失败并返回错误。从语义上讲,在所有情况下都返回错误似乎也是有道理的;不过,归根结底,
timeout.onError(e)
是最重要的部分。