处理 Observable 中的错误

Handling error in Observable

问题描述

我有一个简单的 class,功能简单 buildUseCaseObservable。函数应执行以下操作

  1. 先尝试从互联网获取数据
    • 如果成功写入数据库
    • 如果失败并出现如下异常:ServerUnavailableSocketException 应该从数据库中读取数据并且应该报告错误。
    • 如果收到数据,但数据为空或为空,应该从数据库中读取数据。

基本上一切都按预期工作,除了粗体点。如果在从网络获取数据时出现问题,则仅调用 onError 而不会调用 onNext

我发现有一个名为 onErrorResumeNext 的方法,它基本上可以满足我的需要,但在那种情况下我会丢失错误(未调用 onError,而是调用 onNext被称为)

问题

这样的方法是不是像onCompleteWithError或者如果没有如何实现这样的东西才不会丢失错误?

@PerActivity
public class DataInteractor extends Interactor {

    private RestService rest;
    private DataService data;

    @Inject
    AuthorsInteractor(RestService rest, DataService data) {
        this.rest = rest;
        this.data = data;
    }

    @Override
    protected Observable buildUseCaseObservable() {
        return Observable.concat(
                rest.getData().doOnNext(data -> data.setAuthors(authors)),
                data.getData())
                .first(data -> data != null && !authors.isEmpty());
    }
}

不幸的是,在您的情况下,onError()onNext() 似乎是互斥的。我要使用的是 class,它可以让您 return 结果和错误:

public static class Result<T> {
  T data;
  Throwable error;
}

然后 onErrorResumeNext() 看起来像:

.onErrorResumeNext(throwable -> new Result(data.getData(), throwable))