apps
我不想在.subscribe(
new Action1<Response>() {
@Override
public void call(Response response) {
if (response.isSuccess())
//handle success
else
//throw an Throwable(reponse.getMessage())
}
},
new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
//handle Throwable throw from onNext();
}
}
);
处理(!response.isSuccess())
。如何将它扔到onNext()
并与其他扔掉的人一起处理?
答案 0 :(得分:13)
如果FailureException extends RuntimeException
,那么
.doOnNext(response -> {
if(!response.isSuccess())
throw new FailureException(response.getMessage());
})
.subscribe(
item -> { /* handle success */ },
error -> { /* handle failure */ }
);
如果您尽早抛出异常,这样做效果最好,因为您可以轻松地重试,替代响应等。
答案 1 :(得分:5)
您可以flatMap
对响应或错误的回复
flatMap(new Func1<Response, Observable<Response>>() {
@Override
public Observable<Response> call(Response response) {
if(response.isSuccess()){
return Observable.just(response);
} else {
return Observable.error(new Throwable(response.getMessage()));
}
}
})
答案 2 :(得分:0)
解决方案是在中间添加一个运算符。我的建议是使用map
,因为它不会生成新的Observable
对象(与执行此操作的flatMap
相比):
.map(new Func1<Response, Response>() {
@Override
public Response call(Response response) {
if (response.isSuccess()) {
return response;
} else {
throw new Throwable(reponse.getMessage()));
}
}
})