[英]Refactor subscribe() to map()/flatMap() Spring Webflux
我有这个方法,想摆脱 subscribe() (第 5 行)并改用 map() 或 flatMap() (因为在非阻塞范围内使用 subscribe() 不好):
private Mono<HttpStatus> transferToGlobalLibrary(UnpublishedArticle unpublishedArticle) {
return updateArticleService.updateArticle(unpublishedToOutputContentAdapter.adaptUnpublishedArticle(unpublishedArticle))
.map(httpStatusUpdateArticle -> {
if (httpStatusUpdateArticle.is2xxSuccessful())
articleRepository.save(unpublishedArticle).subscribe();
return httpStatusUpdateArticle;
});
}
我尝试了以下内容:
return updateArticleService.updateArticle(unpublishedToOutputContentAdapter.adaptUnpublishedArticle(unpublishedArticle))
.map(httpStatusUpdateArticle -> {
if (httpStatusUpdateArticle.is2xxSuccessful())
return articleRepository.save(unpublishedArticle)
.flatMap(savedArticle -> httpStatusUpdateArticle);
return httpStatusUpdateArticle;
});
这给我错误no instance(s) of type variable(s) R exist so that HttpStatus conforms to Mono<? 延伸 R> 。 为什么会显示此错误?
重构代码的最佳方法是什么? 谢谢!
笔记:
map
是一种返回Mono
的方法。
当您返回httpStatusUpdateArticle
时,它是一个Mono< HttpStatus>
。
flatMap
还返回一个Mono
。 因此,当您在map
内返回flatMap
时, map
将返回Mono<Mono<HttpStatus>>
。
一种解决方案是首先不调用map
:
return updateArticleService.updateArticle(unpublishedToOutputContentAdapter.adaptUnpublishedArticle(unpublishedArticle))
.flatMap(httpStatusUpdateArticle -> {
if (httpStatusUpdateArticle.is2xxSuccessful())
return articleRepository.save(unpublishedArticle)
.map(savedArticle -> httpStatusUpdateArticle);
return Mono.just(httpStatusUpdateArticle);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.