如何处理RxJava链中出现的错误

时间:2017-01-12 14:22:52

标签: java rx-java

我正在尝试执行以下代码

 testRepository
                .exists(data)
                .flatMap(x -> {
                    if (x==null) {
                        return Observable.error(new Exception("Error"));
                    }
                    return Observable.just(x);
                })
                .flatMap(x -> testRepository.create(x))
                .flatMap(x -> {
                    return Observable.just(x);
                });

此代码在第一个映射中未引发错误时有效。但是如果抛出错误,它就会挂起。 这有什么不对?

由于

1 个答案:

答案 0 :(得分:3)

您还没有正确地声明错误,您不应该通过flatMap执行显式转换为错误observable,因为如果是正状态,则为每个项目创建新的observable并将它们组合起来。

您可以使用

.doOnNext(x -> {
    if (x == null) throw new IllegalStateException("null item error");
})

此异常将中断流,并将在onError订阅回调中正确处理。

最后一条指令也没有意义,因为您将每个元素转换为可观察的单个项目,然后将它们组合回类似的流。

Ps:它也需要在某处调用.subscribe,但我认为这意味着。

相关问题