alpert
alpert

Reputation: 4655

How to recover Flux element in case of an error

Consider I have following code:

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

which outputs:

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()

Is there a way that so I can recover 5 with a default value instead of dropping it?

Upvotes: 1

Views: 502

Answers (1)

Artem Bilan
Artem Bilan

Reputation: 121202

See onErrorReturn() and onErrorResume(). You probably need to use it inside a flatMap() on the inner Mono over the value to avoid loosing the rest of original Flux values.

Upvotes: 1

Related Questions