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

时间:2014-10-07 09:37:29

标签: rx-java

我有5个ObservableflatMap链接在一起。如果前四个Observable生成Exception,我想将不同类型的Exception传播到第五个。{/ p>

如何实现?

感谢。

P.S。 我已经提出了这个尚未经过测试的解决方案:

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;
            }
});

你认为没问题吗?

1 个答案:

答案 0 :(得分:30)

您正在寻找的是onErrorResumeNext,它可以让您捕获从源发出的任何Throwable,并允许您使用新的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(...);

请注意,flatMap是一个处理您的数据流的运算符,但它不允许您在代码示例中处理onError。您可以在订阅流的Observer onError回调中处理错误。