我有5个Observable
与flatMap
链接在一起。如果前四个Observable
生成Exception
,我想将不同类型的Exception
传播到第五个。{/ p>
如何实现?
感谢。
P.S。 我已经提出了这个尚未经过测试的解决方案:
flatMap(
// onNext
new Func1<BoolResponse, Observable<?>>() {
@Override
public Observable<?> call(BoolResponse boolResponse) {
return request;
}
},
// onError
new Func1<Throwable, Observable<?>>() {
@Override
public Observable<?> call(Throwable throwable) {
return Observable.error(new SomethingWentWrong());
}
},
// onCompleted
new Func0<Observable<?>>() {
@Override
public Observable<?> call() {
return request;
}
});
你认为没问题吗?
答案 0 :(得分:30)
您正在寻找的是onErrorResumeNext
,它可以让您捕获从源发出的任何Throwable
,并允许您使用新的Observable或其他Observable
恢复发出不同的Throwable
。
...
.flatMap(...)
.flatMap(...)
.onErrorResumeNext(new Func1<Throwable, Observable<?>>() {
@Override
public Observable<?> call(Throwable throwable) {
// Here simply return an Observable which will emit the Throwable of your liking
return Observable.error(new Throwable(...));
}
})
.flatMap(...);
请注意,flatMap
是一个处理您的数据流的运算符,但它不允许您在代码示例中处理onError
。您可以在订阅流的Observer
onError
回调中处理错误。