繁体   English   中英

将 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;
                });

这给我错误no instance(s) of type variable(s) R exist so that HttpStatus conforms to Mono<? 延伸 R> 为什么会显示此错误?

重构代码的最佳方法是什么? 谢谢!

笔记:

  • updateArticle() 执行 REST API 调用,httpStatusUpdateArticle 包含生成的 HttpStatus

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM