RxJava верижни наблюдаеми и обработка на грешки (разпространение на персонализирани изключения)

Имам 5 Observable, които са свързани с flatMap. В случай че първите четири Observable произвеждат Exception, искам да разпространя различен тип Exception към петия.

Как се постига?

Благодаря.

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;
            }
});

според вас добре ли е


person midnight    schedule 07.10.2014    source източник


Отговори (1)


Това, което търсите, е 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 във вашия примерен код. Можете да се справите с грешката в обратното извикване на onError на вашия Observer, където се абонирате за потока.

person Miguel    schedule 07.10.2014