java - Reactor Mono,如何同步进程(使用 .map())并返回 Mono来自 response.setComplete()
问题描述
我有这个方法可以获取重定向 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()
withresponse.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
完成。
推荐阅读
- unity3d - Unity/C# 中出现不寻常的浮点舍入错误?
- python - 使用 igraph 读取数据
- html - Bootstrap html,试图做一个黑暗的桌子
- javascript - Redux 状态返回未定义
- tflearn - 如何使用 tflearn.data_utils.to_categorical (y, nb_classes)
- php - 无法使用 php 更新 Cookie
- haskell - 我不明白列表减法中的类型类约束
- hive - Hortonworks:Hbase、Hive 等用于哪种类型的数据
- css - Handlebars+BootStrap 卡片边框
- git - Git远程推送后打印一条多色消息