RxJava 2中的映射异常

pio*_*ski 2 java exception-handling reactive-programming rx-java2

如何在RxJava2中将一个发生的异常映射到另一个异常?例如:

doOnError(throwable -> {
    if (throwable instanceof FooException) {
        throw new BarException();
    }
})
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我最终收到CompositeException包含FooException和的内容BarException,但我只想收到BarException。救命!

aka*_*okd 6

您可以使用onErrorResumeNext并从中返回Observable.error():

source.onErrorResumeNext(e -> Observable.error(new BarException()))
Run Code Online (Sandbox Code Playgroud)

编辑

该测试对我来说是合格的:

@Test
public void test() {
    Observable.error(new IOException())
    .onErrorResumeNext((Throwable e) -> Observable.error(new IllegalArgumentException()))
    .test()
    .assertFailure(IllegalArgumentException.class);
}
Run Code Online (Sandbox Code Playgroud)