error-handling - 改造Rxjava错误处理程序

标签 error-handling retrofit2 rx-android

我有一个用于调用api requset的服务类

这是一个示例方法:

public Observable<List<Category>> test(Location location, int radius) {
    Observable<CategoryListResponse> observable = api.test();
    return observable
                .doOnNext(new Action1<CategoryListResponse>() {
                    @Override
                    public void call(CategoryListResponse categoryListResponse) {
                        //handle error
                    }
                })
                .flatMap(new Func1<CategoryListResponse, Observable<Category>>() {
                    @Override
                    public Observable<Category> call(CategoryListResponse categoryListResponse) {
                        return Observable.from(categoryListResponse.getCategories());
                    }
                })
                .map(new Func1<Category, Category>() {
                    @Override
                    public Category call(Category category) {
                        //do something...
                        return category;
                    }
                })
                .toList();
}

并且subscribe()将在另一个类中调用。
observable.subscribe(new Action1<List<Category>>() {
                @Override
                public void call(List<Category> categories) {
                    //on success
                }
            }, new Action1<Throwable>() {
                @Override
                public void call(Throwable throwable) {
                    //on error
                }
            });

我想在返回之前先在doOnNext()中进行错误处理。但是如何触发onError()?

最佳答案

您应该抛出运行时异常,并在onError运算符中控制该异常,以防发生这种情况

Observable<CategoryListResponse> observable = api.test();
return observable
        .doOnNext(list -> {
            try{
                request(list);
            catch(Exception e){
                throw new RuntimeException(e);
            }

        }).onError(t->//Here you control your errors otherwise it will be passed to OnError callback in your subscriber)
        .flatMap(item -> Observable.from(item.getCategories()))
        .map(category-> category)
        .toList();
 }

尝试使用lambda,使您的代码更清晰易读
您可以在这里看到一些RxJava示例https://github.com/politrons/reactive

关于error-handling - 改造Rxjava错误处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39993674/

相关文章:

c# - 使用 NLog 在 ASP.NET Web API 2.1 中进行全局异常处理?

android - 泛化异常处理 Retrofit

rx-java2 - RxJava 有条件地延迟响应

java - RxAndroid 改造问题?

c# - 多客户端udp服务器正确处理错误代码10054

windows - 从批处理脚本启动 Windows 服务并根据结果采取适当的操作

java - 改造不同的调用和响应 json 主体

java - 错误由 : org. xmlpull.v1.XmlPullParserException : Unexpected token (position:TEXT {“code” :0, "messa...@

android - RxJava + Retrofit -> BaseObservable 用于 API 调用,用于集中响应处理

objective-c - ObjC : Error handling. ..返回什么