Вход потока, пока моно не завершится - PullRequest
0 голосов
/ 11 июня 2019

У меня есть следующее:

Flux<String> flux = ...
Mono<Void> mono = ...


Mono<Void> combined = operation(flux, mono);

Они представляют операции, происходящие параллельно.

Теперь я хотел бы напечатать все элементы, испускаемые flux, в sysout до завершения mono, какой оператор использовать здесь?

Я пробовал:

final Disposable subscribe = flux.subscribe(System.out::println);
mono.doOnSuccessOrError((o, e) -> subscribe.dispose());

Но если я чувствую комковатость, я чувствую, что может быть лучший способ сделать это. Есть ли?

1 Ответ

0 голосов
/ 12 июня 2019

Итак, Project Reactor предоставляет несколько методов для регистрации полученных результатов:

Вы можете увидеть, как это работает.

Пример кода:

Flux<String> stringFlux = Flux.just("one", "two", "three")
            .doOnNext(s -> System.out.println("On next: " + s));
    Mono<String> stringMono = Mono.just("four");

    stringFlux = stringFlux.concatWith(stringMono)
            .map(s -> s + " hundred")
            .log();

    stringFlux.subscribe(s -> System.out.println("On next subscriber: " + s));

Результат:

15:32:18.984 [main] INFO reactor.Flux.Map.1 - onSubscribe(FluxMap.MapSubscriber)
15:32:18.986 [main] INFO reactor.Flux.Map.1 - request(unbounded)
On next: one
15:32:19.005 [main] INFO reactor.Flux.Map.1 - onNext(one hundred)
On next subscriber: one hundred
On next: two
15:32:19.005 [main] INFO reactor.Flux.Map.1 - onNext(two hundred)
On next subscriber: two hundred
On next: three
15:32:19.005 [main] INFO reactor.Flux.Map.1 - onNext(three hundred)
On next subscriber: three hundred
15:32:19.006 [main] INFO reactor.Flux.Map.1 - onNext(four hundred)
On next subscriber: four hundred
15:32:19.007 [main] INFO reactor.Flux.Map.1 - onComplete()

Первое сообщение было написано с doOnNext из stringFlux, после этого log изКомбинированные издатели и последний subscribe.

PS Также вы можете регистрировать другие события, такие как OnError, OnComplete и т. д.

...