一般来说,Observable不会抛异常。它会调用 onError
终止Observable序列,以此通知所有的观察者发生了一个不可恢复的错误。
但是,也存在一些异常。例如,如果 onError
调用失败了,Observable不会尝试再次调用 onError
去通知观察者,它会抛出 RuntimeException
,OnErrorFailedException
或者 OnErrorNotImplementedException
。
So rather than catch exceptions, your observer or operator should more typically respond to onError
notifications of exceptions. There are also a variety of Observable operators that you can use to react to or recover from onError
notifications from Observables. For example, you might use an operator to:
因此,你的观察者或者操作符应该对异常发生时的 onError
通知做出合适的响应,而不是捕获(catch)异常。很多操作符可用于对Observable发射的onError
通知做出响应或者从错误中恢复,例如,你可以:
你可以使用 [[异常处理操作符|Error Handling Operators]] 描述的操作符实现这些策略。
CompositeException
getExceptions()
方法获取单独的异常。MissingBackpressureException
OnErrorFailedException
onError()
方法,但是那个方法自己抛出了异常。OnErrorNotImplementedException
onError()
方法,但是那个方法不存在。有多种方法可以消除这个错误:可以调整Observable使它不会到达这个错误条件,也可以在观察者中实现一个onError
处理器, 或者使用其它的操作符在错误到达之前拦截这个 onError
通知。OnErrorThrowable
onError()
方法。相比标准的Throwable
,这种Throwable包含更多的信息:错误本身和在错误发生时Observable的内部状态。