小编典典

Mono.defer()有什么作用?

java

我在一些Spring webflux代码中遇到了Mono.defer()

我在文档中查找了该方法,但不理解其中的解释:

“创建一个Mono提供程序,该提供程序将提供目标Mono供每个下游的订阅者订阅”

请给我一个解释和一个例子。我可能会参考一堆Reactor示例代码(它们的单元测试?)的地方。

谢谢


阅读 4562

收藏
2020-10-09

共1个答案

小编典典

这有点过分简化,但是从概念上讲,Reactor的来源要么是懒惰的,要么是渴望的。诸如HTTP请求之类的更高级的请求将被延迟评估。另一方面,最简单的人喜欢Mono.justFlux.fromIterable渴望。

这样,我的意思是调用Mono.just(System.currentTimeMillis())将立即调用该currentTimeMillis()方法并捕获结果。所述结果仅在被订阅后才
发出Mono。多次订阅也不会更改该值:

Mono<Long> clock = Mono.just(System.currentTimeMillis());
//time == t0

Thread.sleep(10_000);
//time == t10
clock.block(); //we use block for demonstration purposes, returns t0

Thread.sleep(7_000);
//time == t17
clock.block(); //we re-subscribe to clock, still returns t0

defer运营商有没有使这个源懒惰,重新评估拉姆达的含量 每有一个新的用户时间

Mono<Long> clock = Mono.defer(() -> Mono.just(System.currentTimeMillis()));
//time == t0

Thread.sleep(10_000);
//time == t10
clock.block(); //invoked currentTimeMillis() here and returns t10

Thread.sleep(7_000);
//time == t17
clock.block(); //invoke currentTimeMillis() once again here and returns t17
2020-10-09