【发布时间】:2020-03-30 11:11:51
【问题描述】:
这是一段代码
@Test
public void test_mono_void_mono_empty() {
Mono.just("DATA")
.flatMap(s -> Mono.just(s.concat("-")
.concat(s))
.doOnNext(System.out::println)
.then())
.switchIfEmpty(Mono.just("EMPTY")
.doOnNext(System.out::println)
.then())
.block();
}
向控制台提供以下结果:
DATA-DATA
EMPTY
这意味着第一个flatMap 中的链被识别为空链。
另一方面,Reactor 具有以下类 MonoEmpty,它由 Mono.empty() method 返回。最重要的是,该方法说明了以下内容:
/**
* Create a {@link Mono} that completes without emitting any item.
*
* <p>
* <img class="marble" src="doc-files/marbles/empty.svg" alt="">
* <p>
* @param <T> the reified {@link Subscriber} type
*
* @return a completed {@link Mono}
*/
public static <T> Mono<T> empty() {
return MonoEmpty.instance();
}
没有发出任何项目 - 但我使用 then() 方法发出了 Void 类型的对象。
对此有何解释?
【问题讨论】:
-
s.concat("-").concat(s)应该写成s + "-" + s -
@LinosaysReinstateMonica 没有发现任何区别
-
+可以由编译器优化,而使用concat()你没有这样的保证:stackoverflow.com/a/47626/5515060 -
我的意思是问题的范围没有区别。它与主题有什么关系?
-
不是,但必须是吗?我只是提出了一个改进
标签: java project-reactor reactor