Reactor 3 создает MonoEmpty из функции карты - PullRequest
0 голосов
/ 23 января 2019

Каким должно быть возвращаемое значение в функции map, чтобы полученное моно было MonoEmpty?

пример:

Mono<Void> empty = Mono.just("ping").map(s-> ????);

или шаблон должен был выполнитьflatMap нужна ли мне эта функциональность?

Mono<Void> empty = Mono.just("ping").flatMap(s-> Mono.empty());

1 Ответ

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

Если вам нужно, чтобы преобразование выполнялось большую часть времени, но при каких-то условиях оно было пустым, используйте handle (у которого есть возможность отобразить ничего без издержек flatMap):

Mono<String> emptyIfNotPing = Mono.just("ping")
        .handle((t, sink) -> {
            if (t.equals("ping")) sink.next("pong");
            else sink.complete();
        });

Если вы никогда не заботитесь об элементах и ​​просто хотите распространять сигналы терминала (onComplete и onError), вы можете использовать ignoreElement (который поддерживает универсальный тип) или then() (который превращается в Mono<Void>):

Mono<String> source = Mono.just("foo");
Mono<Void> emptyWithTypeLoss = source.then();
Mono<String> emptyWithoutTypeLoss = source.ignoreElement();
...