我有這種方法,想擺脫 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<? 擴展 R>。為什么會顯示此錯誤?
重構代碼的最佳方法是什么?謝謝!
筆記:
- updateArticle() 執行 REST API 呼叫,httpStatusUpdateArticle 包含生成的 HttpStatus
uj5u.com熱心網友回復:
map是一個回傳 a 的方法Mono。
當您回傳時httpStatusUpdateArticle,它是一個Mono< HttpStatus>.
flatMap還回傳一個Mono. 所以當你回傳flatMap里面map,然后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);
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/433089.html
標籤:爪哇 春天 弹簧靴 spring-webflux 项目反应堆
