Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.3k views
in Technique[技术] by (71.8m points)

reactive programming - Spring reactor doOnNext, is it getting executed?

I was playing around with reactor

public @NotNull Mono<ServerResponse> findXXXXSse(final ServerRequest request) {
    return request.bodyToMono(XXXXSearch.class)
            .doOnNext(this::validate)
            .flatMap(this::findXXXXSse)
            .switchIfEmpty(this.emptyBodyException());
}

Adn I was wondering if the use of ".doOnNext(this::validate)" was correct or not. From my pint of view, I'm not sure the validate is called before the findXXXXSse ?

Am I wrong ?

question from:https://stackoverflow.com/questions/65885933/spring-reactor-doonnext-is-it-getting-executed

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Flux.doOnNext method should always be used as a side-effect.

The documentation says "Add behavior (side-effect) triggered when the Flux emits an item." Refer : https://projectreactor.io/docs/core/release/api/reactor/core/publisher/Flux.html#doOnNext-java.util.function.Consumer-

I assume you want to resume your chain only when the validation is successful, i.e., .flatMap(this::findXXXXSse) should only be called if validation succeeds.

You can use filter(this::validate) and add a validate(XXXXSearch.class) method to return true/false.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...