请考虑以下代码:
public static void main(String[] args) {
try {
observableTesting();
} catch (Exception ex) {
System.out.println("Exception propagated : " + ex.getLocalizedMessage());
}
}
private static void observableTesting() throws Exception{
Observable.fromCallable(() -> { throw new Exception("TEST"); })
.subscribe(
next -> {},
error ->
{
System.out.println("Error : " + error.getLocalizedMessage());
throw new Exception(error);
}
);}
我希望这会抛出异常并将其传播到调用函数。这似乎没有产生理想的效果。
作为一种解决方法,我目前必须分配错误并将其抛出函数的末尾。
有没有更好的方法将可观察的错误转换为异常?
答案 0 :(得分:0)
您所看到的行为是预期的行为。请参阅有关错误处理的documentation:
Observable通常不会抛出异常。相反,它会通知 任何观察者通过终止发生了不可恢复的错误 具有onError通知的Observable序列。
这有一些例外。例如,如果onError()调用 本身失败,Observable将不会尝试通知观察者 通过再次调用onError但会抛出RuntimeException,一个 OnErrorFailedException或OnErrorNotImplementedException。
为此,重新抛出异常正是你应该做的,以获得你期望的结果。
答案 1 :(得分:0)
好像你正在使用rxjava-2
。在此版本下,所有未处理Throwable的specification for errors状态将通过系统上安装的Thread.UncaughtExceptionHandler
或通过RxJavaPlugins.setErrorHandler()
安装的错误处理程序传递。如果您正在尝试测试是否有可观察的投掷,您可以使用TestObserver
代替:
Observable
.fromCallable(() -> { throw new Exception("TEST"); })
.test()
.assertSubscribed()
.assertError(Exception.class);