我有一个创建并合并两个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!
答案 0 :(得分:3)
听起来你需要像Observable.mergeDelayError()
这样的东西。
它会应用merge
操作,但如果某些Observable调用onError
,则它不会立即停止但会捕获错误。
一旦所有其他Observable正常完成,错误就会被传播,可能会合并为一个CompositeException
。