RxJava链接可观察量和错误处理(自定义异常传播)

mid*_*ght 16 rx-java

我有5个Observable被链接的s flatMap.如果前四个Observables产生一个Exception我想传播不同类型Exception的第五个.

它是如何实现的?

谢谢.

PS我已经提出了这个尚未经过测试的解决方案:

flatMap(
        // onNext
        new Func1<BoolResponse, Observable<?>>() {
            @Override
            public Observable<?> call(BoolResponse boolResponse) {
                return request;
            }
        },
        // onError
        new Func1<Throwable, Observable<?>>() {
            @Override
            public Observable<?> call(Throwable throwable) {
                return Observable.error(new SomethingWentWrong());
            }
        },
        // onCompleted
        new Func0<Observable<?>>() {
            @Override
            public Observable<?> call() {
                return request;
            }
});
Run Code Online (Sandbox Code Playgroud)

你认为没关系吗?

Mig*_*gne 30

您正在寻找的是什么onErrorResumeNext,它将允许您捕获Throwable从源发出的任何内容,并允许您使用新的Observable恢复或另一个Observable将发出不同的Observable Throwable.

    ...
    .flatMap(...)
    .flatMap(...)
    .onErrorResumeNext(new Func1<Throwable, Observable<?>>() {
        @Override
        public Observable<?> call(Throwable throwable) {
            // Here simply return an Observable which will emit the Throwable of your liking
            return Observable.error(new Throwable(...));
        }
    })
    .flatMap(...);
Run Code Online (Sandbox Code Playgroud)

请记住,这flatMap是一个处理您的数据流的运算符,但它不允许您onError在代码示例中处理has.您可以在订阅流ObserveronError回调中处理错误.