由于分支逻辑

时间:2017-03-22 15:22:51

标签: java rx-java rx-java2

我从服务器获得某种结果。我试图构建一个可观察的序列,它将: 1.检查结果是否成功(result.success()) 2.如果是,则从结果中获取字符串资源(result.getResource())并返回带有该字符串的observable 3.如果不是,则执行一些失败处理代码并返回一个空的可观察

我可以通过简单的switchMap轻松实现这一点,然而它包含我不喜欢的副作用(故障处理代码),因为我希望尽可能将不同的操作分开。理想情况下,我想在单独的消费者中进行故障处理,但问题是我无法在不丢失Result对象的情况下传递.success()方法的结果。有没有办法实现我的需要?

现在,我的代码看起来像这样:

Observable<String> getResource() {
            return getServerResult()
            .switchMap(new Function<Result, ObservableSource<String>>() {
                @Override
                public ObservableSource<String> apply(Result result) throws Exception {
                    if (result.success()) {
                        return Observable.just(result.getResource());
                    } else {
                        onFailure(result); // not happy about this side effect being here
                        return Observable.empty();
                    }
                }
            });

1 个答案:

答案 0 :(得分:2)

您可以自定义Exception并将结果存储在其中,将其包装为流错误并在flatMap中将其返回,如果结果不成功,请使用{{1}调用副作用方法并将其转换回doOnError中的Observable

ErrorResumeNext