RxJava错误处理

时间:2016-01-28 13:20:09

标签: java android rx-java

我有一个创建并合并两个Observable<T>的方法。

private Observable<String> getData() {

    Observable<String> observable1 = Observable.just("Just string")
            .delay(2, TimeUnit.SECONDS);

    Observable<String> observable2 = Observable.create(new Observable.OnSubscribe<String>() {
        @Override
        public void call(Subscriber<? super String> subscriber) {
            subscriber.onError(new Exception("Oops!"));
        }
    });

    Observable<String> merged = observable1.mergeWith(observable2);

    return merged;        
}

问题是observable2中的错误早于observable1中的数据发出。

getData().subscribe(new Observer<String>() {
            @Override
            public void onCompleted() {
                Log.d("rx", "onCompleted");
            }

            @Override
            public void onError(Throwable e) {
                Log.d("rx", "onError: " + e.getMessage());
            }

            @Override
            public void onNext(String s) {
                Log.d("rx", "onNext: " + s);
            }
        });

observable2发出的可选数据和来自observable2的错误不得终止发射,但另一方面,我想在一个观察者中处理所有错误和数据。我可以在observable1的结果后返回此错误吗?这可能吗?

期待结果:

onNext: Just string
onError: Oops!

1 个答案:

答案 0 :(得分:3)

听起来你需要像Observable.mergeDelayError()这样的东西。

它会应用merge操作,但如果某些Observable调用onError,则它不会立即停止但会捕获错误。

一旦所有其他Observable正常完成,错误就会被传播,可能会合并为一个CompositeException