我有以下方法。
@Transactional
public Mono<Long> processPollResult(final PollReport pollReport, final String xmlResult,
final String ref, final String clientId, int orgId) {
return pollOrderRepository.save(toNewOrphanPollOrder(clientId, orgId)).flatMap(pollOder -> {
List<Mono<?>> monoPubs = new ArrayList<>();
monoPubs.add(pollOrderOrphanRepository.save(toPollOrderOrphan(pollOder.getPollOrderId())));
labReport.getLabResults().getLabResultList().forEach(labResult -> {
monoPubs.add((Mono<?>) saveOrphanPollOrderResult(ref, clientId, pollOder, pollResult).subscribe());
});
List<Polls> polls = buildAcknowledgePoll(ref, clientId);
return Mono.when(monoPubs).then(deviceService.acknowledgePolls(polls, clientId)).thenReturn(pollOder.getPollOrderId());
});
}
private Mono<Long> saveOrphanPollOrderResult(final String ref, final String clientId, PollOrder pollOder,
PollResult pollResult) {
return pollOrderTestRepository.save(toPollOrderTest(pollOrder, pollResult.getPollResultHeader()))
.flatMap(pollOrderTestRes -> {
if (pollResult.getPollResultItems() != null
&& pollResult.getPollResultItems().getPollResultItemsList() != null) {
List<PollOrderTestItem> testResultItemsList = labResult.getPollResultItems()
.getPollResultItemsList().stream().map(pollOrderItem -> toPollOrderItem(pollOrderItem,
pollOrder.getPollOrderId(), pollResult.getPollResultHeader().getTestCode()))
.collect(Collectors.toList());
return pollOrderTestItemRepository.saveAll(testResultItemsList).collectList()
.flatMap(pollOrderItemResp -> {
return Mono.just(pollOrder.getPollOrderId());
});
} else {
return Mono.just(pollOrder.getPollOrderId());
}
});
}
在这里
1、单一UBS。添加((单声道
这里,获取类型转换错误。
如果我不放。subscribe(),未调用saveOrphanPollOrderResult中的语句。
在saveOrphanPollOrderResult中添加subscribe(),如下所示,会导致编译时错误,因为它无法返回任何值,也无法将其添加到monos列表中。
private Mono<Long> saveOrphanPollOrderResult(final String ref, final String clientId, PollOrder pollOder,
PollResult pollResult) {
return pollOrderTestRepository.save(toPollOrderTest(pollOrder, pollResult.getPollResultHeader()))
.flatMap(pollOrderTestRes -> {
if (pollResult.getPollResultItems() != null
&& pollResult.getPollResultItems().getPollResultItemsList() != null) {
List<PollOrderTestItem> testResultItemsList = labResult.getPollResultItems()
.getPollResultItemsList().stream().map(pollOrderItem -> toPollOrderItem(pollOrderItem,
pollOrder.getPollOrderId(), pollResult.getPollResultHeader().getTestCode()))
.collect(Collectors.toList());
return pollOrderTestItemRepository.saveAll(testResultItemsList).collectList()
.flatMap(pollOrderItemResp -> {
return Mono.just(pollOrder.getPollOrderId());
});
} else {
return Mono.just(pollOrder.getPollOrderId());
}
}).subscribe(); /// -->
}
您的问题在于:
var id = pollOder.getPollOrderId();
var pollOrderOrphan = toPollOrderOrphan(id);
List<Mono<?>> monoPubs = new ArrayList<>();
monoPubs.add(pollOrderOrphanRepository.save(pollOrderOrphan));
labReport.getLabResults().getLabResultList().forEach(labResult -> {
monoPubs.add((Mono<?>) saveOrphanPollOrderResult(ref, clientId, pollOder, pollResult).subscribe());
});
有几个问题,首先是使用Mono
其次,您不能使用forEach循环。这是命令式编程,而不是被动编程,它假设您有要放在列表中的项目。但你没有。
这就是为什么您必须调用subscribe的原因,因为您需要“等待具体项目”,以便将它们放在列表中。
您需要做的是开始使用Flux
,这是一个假定项目流。
我不知道您在这里的确切逻辑,因为您的代码非常混乱,但作为一个例子:
var labresultList = labReport.getLabResults().getLabResultList();
Mono<List<PollOrderResult> = Flux.fromIterable(labResultList)
.flatMap(saveOrphanPollOrderResult(ref, clientId, pollOder, pollResult))
.collectList();
还有一些OT:
我不知道您的商品类型,但请尽量避免使用
为了易读性,请多使用一些函数,因为代码很难阅读,函数可以自由使用。分配变量而不是嵌套调用也提高了易读性。
问题内容: 我的问题与jQuery方法有关。我无法使用成功参数。 这有效: 这不是: 在第一种情况下,我得到一个JavaScript警报窗口,该窗口使我知道调用的函数正在工作。我在第二个代码块中所做的所有更改都放在了。 这样做的目的是验证$ .ajax是否正在运行,以便在$ .ajax成功运行时可以在其中放置一些实际有用的代码。 问题答案: 在第二个示例中,除非您从服务器成功回电,否则将不会发生任
下面是我的代码,相关部分加粗: 授权.js auth.factory.js 我的问题是,如果没有循环,我会得到以下错误: 它指的是是,而我试图对其调用。我的理解是,最初返回对的引用。然后赋值语句将分配给,代码继续执行。当响应返回时,它应该更新,因此应该“更新”,因为指向更新的对象。 如果这是真的,我的问题就可以理解了,因为它试图在响应返回之前执行。因此,我尝试将循环放入其中,以暂停执行,直到响应返
我试图运行一个基本的Kotlin主文件,但问题是我没有任何可用的运行/调试配置。 我的main.kt文件位于src>main下,是一个非常简单的Helloworld程序。见下图。当我输入Add configuration>kotlin并在Main Class中键入MainKt时,我得到警告:Class MainKt not found。在以前的项目中,MainKt是默认的,我不必手动添加配置。还有
当我调试它时,只有@BeforeClass配置有效-它打开浏览器并转到google。com,我也可以在控制台中看到我的功能的场景,所以Runner可以看到它。他们都说“测试被忽略”。如果我调试功能(而不是通过Runner),它们就会工作。如何从Runner运行/调试它们(一次一个)?请帮我找出错误 我的跑步者:
我开始使用以下技术创建一个项目 我的应用程序部署成功,但当我试图运行它时…我得到以下异常, NestedServletException:请求处理失败;嵌套异常是org.springframework.webflow.execution.flowExecutionException:异常以流'main'org.springframework.web.servlet.frameworkservlet
问题内容: 我是Java新手。有人可以帮我为什么不调用Run方法。提前致谢。 问题答案: 您需要将的实例传递给构造函数,以告诉新线程运行什么: (这是不幸的是,类已经以各种方式被设计得不好。这将是更有益的,如果它 不 具有方法本身,但 没有 强迫你传递到构造函数,然后你会发现在编译的问题-时间。)