java - 什么时候应该阻止/订阅 Mono/Flux?
问题描述
假设你有一些助焊剂和单声道
val people: Flux<Person> = repo.getPeople()
val peopleCount: Mono<Int> = people.count()
并从例如 WebFlux 控制器返回 Mono<Response>:
data class Response(
val people: List<People>,
val personCount: Int
)
应用程序中将通量和单声道分别解析为 List 和 Int 的适当位置在哪里?你只是阻止()一切吗?有没有办法让框架解决所有问题?
编辑:我想我的主要困惑是我看到的所有教程响应对象中的字段实际上都不是反应性的,所以看起来我需要在从控制器返回对象之前解决所有问题。如果响应对象看起来像这样,对我来说会更有意义
data class Response(
val people: Flux<People>,
val personCount: Mono<Int>
)
解决方案
如果您在 servlet 世界中使用反应器,则只能阻止,即使这样您也可以传回 Mono/Flux,这将是一个异步请求。
给你一个例子,比如,
return repo.getPeople().collectList().map( people -> new response(peoples, people.count())
最终成为Mono<Response>
框架将订阅的。
您需要在 Mono/Flux 上使用运算符,而不是阻塞反应链。我建议查看 Reactor Java 文档。每个操作员都有很棒的图表,可以直观地了解操作员正在做什么。
推荐阅读
- git - curl https://github.com 失败,出现 443
- typescript - 获取类型属性的类型
- java - IDEA 发出警告“某些变量总是错误的”?
- javascript - 如何在等待服务器完成处理时暂停代码执行?
- algorithm - 识别增加图中最大流量的边
- python-3.x - 有什么方法可以将我拥有的视频从 30 FPS 更改(降级)到 25 FPS
- python - TensorFlow 中的延迟加载实现
- javascript - 用 "\\" 和 "." 分割字符串 用正则表达式
- function - 函数中的“死方法上下文”错误
- css - 仅在一个实例中覆盖引导样式