Возвращаемое значение, когда Flux завершает? - PullRequest
0 голосов
/ 22 января 2019

Я хотел бы вернуть значение (или издателя) после завершения Flux. Вот пример с (псевдо) кодом, который похож на то, что я ищу:

val myId : Mono<String> = fetchMyId()
myId.flatMap { id ->
     someFlux.map { .. }.doOnNext { ... }.returnOnComplete(Mono.just(id))
}

т.е. Я хочу вернуть id после завершения someFlux. Функция returnOnComplete составлена ​​и не существует (есть функция doOnComplete, но она предназначена для побочных эффектов), поэтому я задаю этот вопрос. Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 23 января 2019

В дополнение к then(Mono<V>), как предлагает @ g00glen00b, есть метод thenReturn(V), который немного короче для записи / очистки, если ваше продолжение простое Mono.just:

mono.then(Mono.just("foo")); //is the same as:
mono.thenReturn("foo");
0 голосов
/ 22 января 2019

Вы можете использовать оператор then(Mono<V>), так как он делает именно то, что вам нужно в соответствии с документацией :

Дайте этому завершиться Flux, затем воспроизводите сигналы отобеспечить Mono.

Другими словами, игнорировать элемент из этого Flux и преобразовать его сигнал завершения в сигнал передачи и завершения предоставленного Mono<V>.Сигнал ошибки воспроизводится в результате Mono<V>.

Например:

Mono
    .just("abc")
    .flatMap(id -> Flux.range(1, 10)
        .doOnNext(nr -> logger.info("Number: {}", nr))
        .then(Mono.just(id)))
    .subscribe(id -> logger.info("ID: {}", id));
...