Java Observable如果发生错误则抛出错误

时间:2017-10-17 16:33:02

标签: java rx-java observable

有没有办法让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块会让我的代码变得混乱。

2 个答案:

答案 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)无论如何都会捕获它。

如果要在发生错误时返回其他/默认对象,请尝试以下运算符:onErrorReturnItemonErrorResumeNextonErrorReturn。这会更清洁。

其他选项是在您的方法本身中实现此onErrorReturnItem机制,而不是抛出异常。