如何从Mono的subscribe调用中获取返回值(整数或Mono<int>)?
解决方案:处理Mono并获取结果
一、返回Mono<Integer>(响应式推荐写法)
在Reactor响应式编程中,应保持流的链式调用,不打断响应式流程。使用map操作符转换Mono的值,直接返回包装好结果的Mono<Integer>:
Mono<Integer> resultMono = mono.map(val -> doSomething(val));
map操作符会接收上游Mono发出的val,调用doSomething(val)得到整数后,将其包装为新的Mono<Integer>返回,完全符合响应式编程的非阻塞设计。
二、同步获取整数(不推荐,可能阻塞线程)
如果必须拿到同步的整数结果,可使用block()方法,但这会阻塞当前线程,违背响应式编程的核心原则,仅建议在测试或非响应式适配场景使用:
Integer result = mono.map(val -> doSomething(val)).block();
block()会等待Mono执行完成并返回内部的整数结果;若Mono执行出错,该方法会直接抛出异常,需额外做异常处理。
注意事项
- 不要试图在
subscribe中直接获取返回值:subscribe是终端操作,仅用于触发流执行和消费结果,无法将返回值传递到外部逻辑中。 - Java泛型不支持基本类型,因此只能使用
Mono<Integer>,不能写Mono<int>。
内容的提问来源于stack exchange,提问作者Marco Sulla
相关产品推荐
相关产品推荐

