【发布时间】:2017-08-14 19:40:30
【问题描述】:
我有某种从服务器获得的结果。我正在尝试构建一个可观察的序列,它将: 1.检查结果是否成功(result.success()) 2. 如果是,则从结果中获取一个字符串资源 (result.getResource()) 并返回一个带有该字符串的 observable 3.如果不是,则执行一些故障处理代码并返回一个空的observable
我可以使用简单的 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();
}
}
});
【问题讨论】: