有没有办法让Observable抛出一个在flatMap()
之类的函数中发生的异常?
在Java中,在普通函数上,您可以指定它可能抛出异常:
public void dangerousFunction() throws IOException {}
在像Observable
这样的flatMap()
函数中,我似乎无法找到类似的语法。我可以像这样使用try/catch
:
myObservable.flatMap(() -> {
try {
return dangerousFunction();
} catch (IOException e) {
return Observable.error(e);
}
});
是否有更清晰的写作方法?如果我有很多地图和/或Observables
,那么很多try/catch
块会让我的代码变得混乱。
答案 0 :(得分:0)
在RxJava booleanAllTrueConverter
方法中处理异常的标准方法是通过catch-and-throw传播异常。例如:
map()
当在多个.map(b -> {
try {
...
} catch (IOException ex) {
// manual catch and throw
throw new RuntimeException(ex);
// or catch-and-throw using a built-in helper
throw Exceptions.propagate(e);
}
})
调用中重复时,这可能会非常冗长,因此您可以定义一个帮助程序来包装此行为,例如。
map()
答案 1 :(得分:0)
如果您只想在catch块中返回Observable.error(e)
,那么根本不需要try / catch。异常将发送到下游,.subscribe(,throwable)
无论如何都会捕获它。
如果要在发生错误时返回其他/默认对象,请尝试以下运算符:onErrorReturnItem
,onErrorResumeNext
,onErrorReturn
。这会更清洁。
其他选项是在您的方法本身中实现此onErrorReturnItem
机制,而不是抛出异常。