【发布时间】:2020-02-13 20:22:20
【问题描述】:
我对响应式编程比较陌生。
我的问题是关于Mono::then
我想要做的是,从传入的请求中提取正文,将其设置为静态变量。 完成后,发送一个响应,说明服务已启动。 但是下面的代码总是返回“Service started for: null”。
我认为Mono::then 应该在第一个单声道完成后运行(在这种情况下,在设置静态变量之后)并返回“Service started for: a,b,c”。
我的理解有误吗?
(另外,任何代码批评都表示赞赏)
public Mono<ServerResponse> getStatus(ServerRequest req) {
Mono<List<Request>> body = req.bodyToFlux(Request.class).collectList();
return ServerResponse.ok()
.body(body.doOnNext(i -> {
Service.a = i;
logger.info("Service started for : {}", i.toString());
})
.then(Mono.just("Service started for: " + Service.a)), String.class);
}
【问题讨论】:
-
"Mono::then 应该在后面运行" 没有什么可运行的。 Mono::just javadoc:“创建一个新的 Mono,它发出指定的项目,在实例化时被捕获。”你可以检查你对 Mono::then 的假设,使用 Mono::fromCallable, Mono::fromSupplier 而不是 Mono::just
-
不应该 Mono::just 运行 "after" body.doOnNext 吗?
标签: java reactive-programming spring-webflux project-reactor