Как восстановить элемент потока в случае ошибки

#spring-webflux #reactor

#spring-webflux #реактор

Вопрос:

Рассмотрим, что у меня есть следующий код:

     Flux.fromIterable(List.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11))
        .flatMap(integer -> {
            if (integer == 5) {
                throw new RuntimeException("error");
            }
            return just(Tuples.of(integer, new Random().nextInt()));
        })
        .onErrorContinue((throwable, o) -> just(Tuples.of(o, 0)))
        .log()
        .subscribe();
 

какие результаты:

 onSubscribe([Fuseable] FluxContextStart.ContextStartSubscriber)
request(unbounded)
onNext([1,-1752848133])
onNext([2,-1719473285])
onNext([3,819220275])
onNext([4,-725013418])
onNext([6,-1693809308])
onNext([7,1457499883])
onNext([8,-740589679])
onNext([9,1718349574])
onNext([10,-861794538])
onNext([11,1016444064])
onComplete()
 

Есть ли способ, чтобы я мог восстановить 5 значение по умолчанию вместо его удаления?

Ответ №1:

См onErrorReturn() . и onErrorResume() . Вероятно, вам нужно использовать его внутри a flatMap() на внутреннем Mono по значению, чтобы избежать потери остальных исходных Flux значений.