如何使用RxJava 1.x向调用者抛出异常,而不是处理它?

时间:2017-02-04 02:57:36

标签: java rx-java couchbase

我有一个使用RxJava的方法,它调用jackson对象映射器将json对象反序列化为java对象(PO​​JO)。 readValue方法抛出一个IOException,必须处理或抛出给我的方法的调用者。我不应该在这里处理它,而是让我的呼叫者处理它。我怎么能在RxJava中做到这一点?通常,只需要在我的方法签名中添加throws IOException

这是我的代码:

public Observable<T> findByIdAsync(String id) throws IOException {
    return datasource
            .getBucket()
            .async()
            .get(String.valueOf(id), RawJsonDocument.class)
            .map(json -> objectMapper.readValue(json.content(), getType()));
}

objectMapper.readValue(json.content(), getType())抛出IOException因此必须抓住或抛出它。

1 个答案:

答案 0 :(得分:3)

使用Observable

fromCallable方法打包到.flatMap(json -> Observable.fromCallable(() -> objectMapper.readValue(json.content(), getType())))
  

返回一个Observable,当观察者订阅它时,调用你指定的函数,然后发出从该函数返回的值。

Exception

Callable中引发的任何Subscriber's都会中断流,并且会触发onError {{1}}回调(如果未在流中的某处处理)。