如何使用RxJava在onNext()中抛出错误

时间:2016-10-19 10:06:23

标签: java rx-java

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()并与其他扔掉的人一起处理?

3 个答案:

答案 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()));
        }
    }
 })