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

确保Spring WebFlow中的方法执行

巢烨
2023-03-14
override fun uploadFileAndNotifyCadmium(
        validatedPages: List<KycFile>,
        documentId: UUID,
    ): Mono<Unit> {

        validatedPages.forEach { it ->
            s3Service.uploadToToxicBucket(
                documentId, it.fileName })
                .then()
        }

        return cadmiumClient.notifyCadmium(documentId) // API call to other microservice
    }

我有这个方法,我试图调用一个方法(s3Service.uploadToToxicBucket()),它在迭代列表时返回单声道。我希望确保为每个列表元素调用此方法。因此,我在生成的Mono中添加了然后()。此外,我希望方法cadmiumClient.notify镉()仅在上传所有文件后执行。这是正确的方法吗?或者我可以使用其他操作符吗?。cadmiumClient.notify镉()也返回单声道单位。

我还调用uploadfileandnotify()。然后()。

我正在使用然后(),因为执行是懒惰的,并且我不想调用订阅()来确保这些方法的执行。此外,控制器中还调用了方法上传文件和文件,因此它是由Spring网络流量自动订阅的。我对that()用法的理解可能是错误的。

方法2:我也想过这样做:

override fun uploadFileAndNotifyCadmium(
        validatedPages: List<KycFile>,
        documentId: UUID,
    ): Mono<Unit> {

        val list = mutableListOf<Mono<Unit>>()

        validatedPages.forEach { it ->
            val result =s3Service.uploadToToxicBucket(
                documentId, it.fileName })

        list.add(result)

        }

        //Zip all the elements in list together into some variable zippedResult

        return zippedResult.then(cadmiumClient.notifyCadmium(documentId)) // API call to other microservice
    }

对于这种方法,当列表的大小以前未知时,我找不到任何操作符将所有元素压缩在一起。


共有1个答案

申屠宗清
2023-03-14

我试图理解你想做什么,因为你的解释很不清楚。

我不使用Kotlin编写代码,但如果我做对了,您要做的是:

  • 获取n个物体的列表
  • 对列表中的每个对象执行某种类型的副作用
  • 收集所有副作用的某种形式的结果
  • 返回此结果

这就是我在简单的反应性java中的做法

    return Flux.fromIterable(List.of("one", "two", "three"))
            .flatMap( // do some side effect )
            .collect(Collectors.toList());
  • 将列表转换为Flux

 类似资料:
  • 我的目标是创建一个抽象类,它的静态方法必须被实现,但是由于静态方法不能被抽象,我有一些问题。 这就是我提出的解决方案: 我写这篇文章是因为我找不到任何等价的答案,这让我想知道这在Java中是否是惯用的。

  • 本文向大家介绍js循环中调用异步的方法,如何确保执行结果的顺序是正确的?相关面试题,主要包含被问及js循环中调用异步的方法,如何确保执行结果的顺序是正确的?时的应答技巧和注意事项,需要的朋友参考一下 An example:

  • 问题内容: 我想知道退出程序之前等待go例程完成的正确方法是什么。阅读其他答案,看来bool chan可以解决问题,就像在Playground链接中一样 我在这里有两个问题: 为什么<-完成的作品完全可以? 如果我取消最后一行的注释会怎样?我有一个死锁错误。这是因为通道为空,并且没有其他函数向其发送值吗? 问题答案: 为何一切正常? 之所以有效,是因为运行时检测到您正在向其他地方的通道写入内容。

  • 我有一个层,称为,另一个称为。我想知道我是否可以强制执行一条规则,上面写着: 在参数列表包含名为foo的参数的服务层中的任何公共类的任何公共方法中,断言它从权限层调用方法(理想情况下,确保在服务层中的任何其他方法之前调用该方法)。 ArchUnit可以这样做吗?

  • 目前我正在为学校做一个项目,下面是要求: 编写一个Temperature类,它将保持以华氏为单位的温度,并提供获取以华氏、摄氏度和开尔文为单位的温度的方法。该类应具有以下字段: :保持华氏温度的倍增器。 该类应具有以下方法: :构造函数接受华氏温度(双倍)并将其存储在ftemp字段中。 :set Fahrenheit方法接受一个华氏温度(作为双值),并将其存储在ftemp字段中。 :返回ftemp

  • 问题内容: 给定以下函数调用: 的执行顺序和未指定,所以可以之前被调用或之前在。 是否指定函数参数表达式的执行顺序或未指定的顺序? 问题答案: 从Java语言规范(关于表达式)中: 15.7.4从左到右评估参数列表 在方法或构造函数调用或类实例创建表达式中,参数表达式可能出现在括号内,以逗号分隔。每个参数表达式似乎都在其右侧任何参数表达式的任何部分之前被完全评估。