我正在尝试将“第三方”发布商包装到RxJava中。在订阅期间,我正在准备发布者,这可能会导致例外(当发布者不可用时)。
我应该怎么处理异常?
1)从subscribe方法中抛出它?
2)将其推入观察者的OnError
方法?
3)还有别的吗?
我正在考虑推送到OnError
,然后如何实现订阅?如果OnError
应该是订阅中的最后一个事件,我应该考虑订阅是否发生?什么归还Subscription
?只是NOP
lambda?
答案 0 :(得分:1)
“发布者”和“换行”的含义有点不清楚。
例如,有一个返回Observable
的API调用,但调用本身可能会抛出未经检查的异常。一种简单的方法是使用defer
来捕获该异常并将其转发给订阅者:
Observable.defer(() -> api.unreliableMethod())...
如果您的意思是拥有Reactive-Streams Publisher
和RxJava 2,则只需拨打Flowable.fromPublisher
或再次Flowable.defer(() -> publisher)
,就像上面一样。
否则,RxJavaReactiveStreams允许您将Publisher
转换为Observable
(并推迟()过程以捕获异常(如果需要):
Observable.defer(() ->
RxJavaReactiveStreams.toObservable(api.unreliablePublisher()))...
答案 1 :(得分:0)
我正在考虑推送OnError,然后如何实现订阅?如果OnError应该是订阅中的最后一个事件,我应该认为订阅是否发生?什么归还订阅?刚刚NOP lambda?
这实际上是RxJava本身通常如何处理'构造函数中的异常。每个运营商。
如果您正在使用RxJava2,那么您需要记住一条额外的规则。这就是Subscriber.onSubcribe()
和onError
之前必须始终调用onComplete
,所以即使它立即抛出异常,也必须调用onSubscribe
和onError