Kotlin 确保SpringWebFlux中的方法执行
对于这种方法,我找不到任何操作符将所有元素压缩在一起,因为以前不知道列表的大小。我试图理解您想做什么,因为您的解释不清楚 我不使用Kotlin编写代码,但如果我做对了,您要做的是: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>,
- 获取n个对象的列表
- 对列表中的每个对象执行某种类型的副作用
- 收集所有副作用的某种形式的结果
- 返回此结果
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
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());