如何将 zip() 函数中的异常传递给订阅者
How to deliver exception in zip() function to subscriber
我在 Android 上使用 RxJava 1.x,语言级别为 1.7(所以请不要使用 lambda)。我正在尝试使用 zip()
运算符组合 4 个流。但是,我使用的 Func4
实现可能 运行 变成 IOException
,需要以某种方式处理。但是,Func4#call()
签名不允许抛出异常。所以我想知道如何处理这些。理想情况下,异常将传递给 Subscriber
的 onError()
方法,该方法将订阅 zip()
操作产生的 Observable
。
一些示例代码:
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
}});
}
当您的 IOException
发生时,只需抛出一个扩展 RuntimeException
的异常。它将传递给 Subscriber
的 onError
回调。
您还可以使用:
Exceptions.propagate(throwable)
它会把你的Throwable包装到RuntimeException中并传递给onError通道。
我在 Android 上使用 RxJava 1.x,语言级别为 1.7(所以请不要使用 lambda)。我正在尝试使用 zip()
运算符组合 4 个流。但是,我使用的 Func4
实现可能 运行 变成 IOException
,需要以某种方式处理。但是,Func4#call()
签名不允许抛出异常。所以我想知道如何处理这些。理想情况下,异常将传递给 Subscriber
的 onError()
方法,该方法将订阅 zip()
操作产生的 Observable
。
一些示例代码:
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
}});
}
当您的 IOException
发生时,只需抛出一个扩展 RuntimeException
的异常。它将传递给 Subscriber
的 onError
回调。
您还可以使用:
Exceptions.propagate(throwable)
它会把你的Throwable包装到RuntimeException中并传递给onError通道。