将 subscribe() 重构为 map()/flatMap() Spring Webflux
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;
});
这给了我错误 不存在类型变量 R 的实例,因此 HttpStatus 符合 Mono。为什么会显示这个错误?
重构代码的最佳方法是什么?谢谢!
备注:
- updateArticle() 执行 REST API 调用,httpStatusUpdateArticle 包含生成的 HttpStatus
map
是 return 一个 Mono
的方法。
当你 return httpStatusUpdateArticle
它是 Mono< HttpStatus>
.
flatMap
也 return 是 Mono
。所以当你 return flatMap
在 map
里面时,那么 map
return 就是 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);
});
我有这个方法,想摆脱 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;
});
这给了我错误 不存在类型变量 R 的实例,因此 HttpStatus 符合 Mono。为什么会显示这个错误?
重构代码的最佳方法是什么?谢谢!
备注:
- updateArticle() 执行 REST API 调用,httpStatusUpdateArticle 包含生成的 HttpStatus
map
是 return 一个 Mono
的方法。
当你 return httpStatusUpdateArticle
它是 Mono< HttpStatus>
.
flatMap
也 return 是 Mono
。所以当你 return flatMap
在 map
里面时,那么 map
return 就是 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);
});