java - 如何处理 RxJava 链中抛出的错误

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

当第一个 map 中没有抛出错误时,此代码有效。但如果抛出错误,它就会挂起。 这里出了什么问题?

谢谢

最佳答案

您没有正确声明错误,您不应该通过 flatMap 执行显式转换为错误可观察量,因为在积极状态下,您为每个项目创建新的可观察量并将它们组合起来。

您可以只使用

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

此异常会中断流,并会在订阅的 onError 回调中得到正确处理。

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

Ps:它还需要在某个地方被称为.subscribe,但我认为这是有意义的。

关于java - 如何处理 RxJava 链中抛出的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41615560/

相关文章:

java - 具有多次访问实现的访问者模式

java - 在 Mac OS X Mavericks 上使用 Maven 插件启动 Google Appengine devserver 时出现延迟

java - Android Studio 添加 rxjava 库

java - 使用 RxJava 中的可观察线程对数据 "read only"执行某些操作

java - RxJava。将列表的热可观察对象转换为单项流,对其进行处理并转换为列表

java - Spring Cloud Stream @ServiceActivator 在异常时不向 errorChannel 发送消息

java - Lucene 4 分页

java - Java中面向对象编程的问题

java - RxJava1 和 RxJava2 的区别

java - RxJava - Just vs From