java - 如果我在订阅期间出现异常怎么办?

标签 java rx-java reactivex subscriber

我正在尝试将“第三方”发布者包装到 RxJava 中。在订阅期间,我正在准备发布者,这可能会导致异常(当发布者不可用时)。

遇到异常我该怎么办?

1)从订阅方法中抛出它?

2) 将其推送到观察者的 OnError 方法中?

3)还有别的吗?

我正在考虑推送到OnError,那么如何实现订阅呢?如果 OnError 应该是订阅中的最后一个事件,我是否应该认为订阅发生了?作为订阅返回什么?只是NOP lambda?

最佳答案

“发布者”和“包装”的含义有点不清楚。

例如,有一个 API 调用返回 Observable,但调用本身可能会引发未经检查的异常。一个简单的方法是使用 defer 来捕获该异常并将其转发给订阅者:

Observable.defer(() -> api.unreliableMethod())...

如果您的意思是您有一个 Reactive-Streams Publisher 和 RxJava 2,您可以简单地调用 Flowable.fromPublisher 或再次调用 Flowable.defer(( ) -> 发布者) 像上面一样。

否则,RxJavaReactiveStreams让我们将 Publisher 转换为 Observable(如果需要,可以 defer() 捕获异常的过程):

Observable.defer(() ->
    RxJavaReactiveStreams.toObservable(api.unreliablePublisher()))...

关于java - 如果我在订阅期间出现异常怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41871128/

相关文章:

scala - Observable 需要无限量的内存?

java - 从 Observable<List<String>> 返回 List<String>

python - 通过 rxpy 从 observable 返回一个值

ios - RXSwift - takeUntil 在下一个事件之前取消

javascript - RxJS 并非所有订阅者都收到所有事件

java - 在Spring JavaConfig中,bean返回类型应该是接口(interface)还是实现?

java - Eclipse调试时出现"Invisible"断点?

android - 实现 retryWhen 逻辑

java - 在 Core Java 中识别 Android 设备

启动画面启动时出现 java.lang.UnsupportedOperationException