java - Mono.flatMap 没有被调用
问题描述
我还是 Spring Webflux 的新手,Mono 上的 flatMap 似乎不起作用。我有以下功能并且对kafkaPublisher.publishToTopic的调用不起作用。我插入了 print 语句来测试它是否打印任何东西,它甚至不执行 print 语句。publishToTopic返回Mono<Void>
。
private Mono<Void> test(Long gId, UUID pId) {
Mono<UUID> nId = pDao.findNId(pId);
Mono<List<String>> channels = nId.flatMapMany(pDao::findChannels).collectList();
return Mono.zip(nId, channels)
.flatMap(t -> {
System.out.println(t.getT1());
return kafkaPublisher.publishToTopic(gId, t.getT1().toString(), t.getT2());
});
}
如果被调用,它会被调用.block
,flatMap
如下所示。
private Mono<Void> test(Long gId, UUID pId) {
Mono<UUID> nId = pDao.findNId(pId);
Mono<List<String>> channels = nId.flatMapMany(pDao::findChannels).collectList();
Mono.zip(nId, channels)
.flatMap(t -> {
System.out.println(t.getT1());
return kafkaPublisher.publishToTopic(gId, t.getT1().toString(), t.getT2());
}).block();
return Mono.empty();
}
解决方案
我发现了我的错误。我没有使用调用此方法test
的函数中任何地方的结果。test
这是我用来调用的代码test
public Mono<Void> saveNew(NewPre pre) {
preDao.insert(pre)
.flatMap(p -> test(p.pId(), p.nId()));
return Mono.empty();
}
我将其更改为以下,并且可以正常工作。
public Mono<Void> saveNew(NewPre pre) {
return preDao.insert(preference)
.flatMap(p -> test(p.p(), p.n())
.then(Mono.empty()));
}
推荐阅读
- java - java中的连续长度问题
- arrays - 知道过滤器元素是一个序列,如何通过另一个 Swift 数组过滤 Swift 数组?速度很重要
- parsing - 如何证明文法 G 不是 LL(1)
- node.js - 提高大文件上传的部署服务器性能
- java - 从任何项目外部将 Maven 工件安装到本地存储库中
- arrays - 无法访问 JSON 数组中的第一个数据项
- python - 引用初始化中建立的属性时出错
- google-app-engine - 如何保护不同 GAE 之间的连接?
- node.js - 将静态节点,js请求转换为迭代批处理以避免API限制
- ruby-on-rails - 如何让 sidekiq 作业在同一个 AWS EC2 实例上执行