如何将zip()函数中的异常传递给订阅者

时间:2017-04-25 15:58:17

标签: java android rx-java rx-android

我在Android上使用RxJava 1.x语言级别1.7(所以请不要使用lambda)。我正在尝试使用zip()运算符组合4个流。但是,我使用的Func4实现可能会遇到需要以某种方式处理的IOException。但是,Func4#call()签名不允许抛出异常。所以我想知道如何处理这些问题。理想情况下,异常将传递给onError() Subscriber方法,该方法将订阅Observable操作产生的zip()

一些示例代码:

public Observable<R> combine(Observable<A> observable1, Observable<B> observable2, Observable<C> observable3, Observable<D> observable4) {
    return Observable<R>.zip(observable1, observable2, observable3, observable4, new Func4<A, B, C, D, R> {
    public R call(A a, B b, C c, D d) {
        // some code which may throw IOExceptions
    }});
}

2 个答案:

答案 0 :(得分:3)

RuntimeException发生时,只需抛出一个延伸IOException的异常。它将传递到onError的{​​{1}}回调。

答案 1 :(得分:3)

你也可以使用:

Exceptions.propagate(throwable)

它会将Throwable包装成RuntimeException并传递onError通道。