Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 确保SpringWebFlux中的方法执行_Kotlin_Reactive Programming_Spring Webflux_Project Reactor - Fatal编程技术网

Kotlin 确保SpringWebFlux中的方法执行

Kotlin 确保SpringWebFlux中的方法执行,kotlin,reactive-programming,spring-webflux,project-reactor,Kotlin,Reactive Programming,Spring Webflux,Project Reactor,对于这种方法,我找不到任何操作符将所有元素压缩在一起,因为以前不知道列表的大小。我试图理解您想做什么,因为您的解释不清楚 我不使用Kotlin编写代码,但如果我做对了,您要做的是: 获取n个对象的列表 对列表中的每个对象执行某种类型的副作用 收集所有副作用的某种形式的结果 返回此结果 这就是我在纯反应式java中所做的 override fun uploadFileAndNotifyCadmium( validatedPages: List<KycFile>,

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

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

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

  • 获取n个对象的列表
  • 对列表中的每个对象执行某种类型的副作用
  • 收集所有副作用的某种形式的结果
  • 返回此结果
这就是我在纯反应式java中所做的

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
    }
  • 将列表转换为通量
  • flatMap
    中为每个发出的项目执行副作用
  • 将所有结果收集为一个列表
  • 返回
    Mono

您的理解是错误的,发起呼叫的人就是订阅者。因此,调用客户端将在引擎盖下调用subscribe并启动链,如果您有一个列表,您应该将其设置为通量,并且对于通量中的每个发射对象,您可以执行您想要执行的操作。当你们刚刚给我们一段代码时,这很难。由于我们不知道您发布的任何函数的任何返回类型,因此我们不知道如何帮助您。他们是否返回单声道、字符串、通量、列表等etc@ThomasAndolf我已经用返回类型更新了问题。我还知道,调用客户机订阅了该方法,在我的例子中,该方法是从控制器调用的,因此它是由Webflux订阅的。我不确定我是否正确使用then(),方法2似乎是一种更好的方法,但我不知道如何在事先不知道列表大小的情况下组合多个MONO。您应该将列表放在fluxsounds中,因为
flatMap
是否符合顺序,因为目标不是简单的副作用,而是一种异步处理(上传到s3,它返回一个
Mono
信号来表示完成/错误)是的,我同意这一点,这取决于他想到的副作用类型,你在这方面比我有更多的经验
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
    }
    return Flux.fromIterable(List.of("one", "two", "three"))
            .flatMap( // do some side effect )
            .collect(Collectors.toList());