Mono.flatMap 没有被调用
Mono.flatMap is not getting invoked
我对 Spring 还是个新手,Mono 上的 Webflux 和 flatMap 似乎不起作用。
我有以下功能,但无法调用 kafkaPublisher.publishToTopic。我插入了 print 语句来测试它是否打印了任何东西,它甚至没有执行 print 语句。 publishToTopic returns 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());
});
}
如果在 flatMap
上调用 .block
,它会被调用,如下所示。
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()));
}
flatMap 无限期挂起,通过将其转换为未来对象来关闭异步操作的最佳方式。
public Mono<Void> saveNew(NewPre pre) {
return preDao.insert(preference)
.flatMap({
p -> test(p.p(), p.n())
}).toFuture();
}
我对 Spring 还是个新手,Mono 上的 Webflux 和 flatMap 似乎不起作用。
我有以下功能,但无法调用 kafkaPublisher.publishToTopic。我插入了 print 语句来测试它是否打印了任何东西,它甚至没有执行 print 语句。 publishToTopic returns 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());
});
}
如果在 flatMap
上调用 .block
,它会被调用,如下所示。
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()));
}
flatMap 无限期挂起,通过将其转换为未来对象来关闭异步操作的最佳方式。
public Mono<Void> saveNew(NewPre pre) {
return preDao.insert(preference)
.flatMap({
p -> test(p.p(), p.n())
}).toFuture();
}