当前位置: 首页 > 知识库问答 >
问题:

Spring webflow不运行无功调用

洪照
2023-03-14

我有以下方法

@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();   /// --> 
            }

共有1个答案

龙枫
2023-03-14

您的问题在于:

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方法。提前致谢。 问题答案: 您需要将的实例传递给构造函数,以告诉新线程运行什么: (这是不幸的是,类已经以各种方式被设计得不好。这将是更有益的,如果它 不 具有方法本身,但 没有 强迫你传递到构造函数,然后你会发现在编译的问题-时间。)