我有5个观察器,用flatMap链接.如果前四个Observables产生异常,我想传播不同类型的异常到第五个.
如何实现?
谢谢.
附:
我已经提出了这个未经测试的解决方案:
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; } });
你觉得没关系吗
解决方法
您正在寻找的是onErrorResumeNext,它将允许您捕获源中发出的任何Throwable,并允许您使用新的Observable或另一个可发出不同Throwable的Observable来恢复.
... .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回调中订阅流的错误.