gpt4 book ai didi

java - Reactor Mono,如何同步进程(使用 .map())并从 response.setComplete() 返回 Mono

转载 作者:行者123 更新时间:2023-12-04 15:38:23 27 4
gpt4 key购买 nike

我有这种获取重定向 url 然后重定向到该 url 的方法

private Mono<Void> redirectToUrl(ServerHttpResponse response, String status) {
String queryParameter = "?status=" + status;
return getRedirectUrl(queryParameter)
.flatMap(url -> {
response.setStatusCode(HttpStatus.MOVED_PERMANENTLY);
response.getHeaders().setLocation(url);
return response.setComplete();
});
}

在第 4 行我使用 flatmap这将修改 response对象异步,在这种情况下,响应将立即返回给客户端,而无需重定向。

我不能使用 map()response.setComplete()因为它会返回 Mono<Mono<void>> , 我需要返回 Mono<void>

如何同步处理

 response.setStatusCode(HttpStatus.MOVED_PERMANENTLY);
response.getHeaders().setLocation(url);
return response.setComplete();

并返回Mono<void>

最佳答案

如果必须同步处理,可以使用map(),然后调用.then() ,它将等待 Mono 完成,然后简单地中继完成信号。

但是,根据我的理解,flatMap() 调用应该按原样工作,因为 Mono 仍然不会完成,直到flatMap() 完成了——无论它是异步的还是非异步的,这应该没有区别。我怀疑您的代码未按预期运行的真正原因是因为调用 redirectToUrl() 的任何方法都没有等待返回的 Mono 在返回之前完成响应。

关于java - Reactor Mono,如何同步进程(使用 .map())并从 response.setComplete() 返回 Mono<void>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58971298/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com