如何使用RxJava在onNext()中抛出错误 。订阅( 新行动1(){ @凌驾 公共无效呼叫(响应){ if(response.issucess()) //成功 其他的 //抛出一个可丢弃的(response.getMessage()) } }, 新行动1(){ @凌驾 公共无效呼叫(可丢弃可丢弃){ //从onNext()处理可丢弃的投掷; } } );
我不想在如何使用RxJava在onNext()中抛出错误 。订阅( 新行动1(){ @凌驾 公共无效呼叫(响应){ if(response.issucess()) //成功 其他的 //抛出一个可丢弃的(response.getMessage()) } }, 新行动1(){ @凌驾 公共无效呼叫(可丢弃可丢弃){ //从onNext()处理可丢弃的投掷; } } );,java,rx-java,Java,Rx Java,我不想在onNext()中处理(!response.issucess())。我怎样才能将它扔给onError(),并与其他可丢弃的一起处理?您可以flatMap您对响应或错误的响应 .subscribe( new Action1<Response>() { @Override public void call(Response response) { if (response.isSuccess())
onNext()
中处理(!response.issucess())
。我怎样才能将它扔给onError()
,并与其他可丢弃的一起处理?您可以flatMap
您对响应或错误的响应
.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();
}
}
);
flatMap(新函数1(){
@凌驾
公共可观察呼叫(响应){
if(response.issucess()){
返回可观察的。公正(响应);
}否则{
返回Observable.error(新的Throwable(response.getMessage());
}
}
})
如果故障异常扩展了RuntimeException,则
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()));
}
}
})
<>这是最好的,如果你尽可能早地抛出异常,那么你就可以很容易地完成重试,替代的响应等等。我的建议是使用
map
,因为它不会生成新的Observable
对象(与flatMap
相比,后者会生成新的Observable
对象):
.map(新函数1(){
@凌驾
公众回应电话(回应){
if(response.issucess()){
返回响应;
}否则{
抛出新的可丢弃对象(response.getMessage());
}
}
})
FYI:map确实创建了一个新的可观察对象,它只是在内部为您创建。抛出时扩展RuntimeException的异常不会崩溃吗,因为它们不是由RxJava处理的?
.doOnNext(response -> {
if(!response.isSuccess())
throw new FailureException(response.getMessage());
})
.subscribe(
item -> { /* handle success */ },
error -> { /* handle failure */ }
);
.map(new Func1<Response, Response>() {
@Override
public Response call(Response response) {
if (response.isSuccess()) {
return response;
} else {
throw new Throwable(reponse.getMessage()));
}
}
})