簡體   English   中英

如何使用RxJava在onNext()中拋出錯誤

[英]How can I throw error in onNext() with RxJava

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

我不想在onNext()處理(!response.isSuccess()) onNext() 我如何將它拋給onError()並與其他throwable一起處理?

如果FailureException extends RuntimeException ,那么

.doOnNext(response -> {
  if(!response.isSuccess())
    throw new FailureException(response.getMessage());
})
.subscribe(
    item  -> { /* handle success */ },
    error -> { /* handle failure */ }
);

如果您盡早拋出異常,這種方法效果最好,因為您可以輕松地進行重試,替代響應等。

你可以將你的響應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()));
        }
    }
})

解決方案是在中間添加一個運算符。 我的建議是使用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()));
        }
    }
 })

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM