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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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 Webflux,基于反应出版商的流程在中间中断了_Kotlin_Reactive Programming_Spring Webflux_Spring Webclient - Fatal编程技术网

Kotlin Webflux,基于反应出版商的流程在中间中断了

Kotlin Webflux,基于反应出版商的流程在中间中断了,kotlin,reactive-programming,spring-webflux,spring-webclient,Kotlin,Reactive Programming,Spring Webflux,Spring Webclient,该方法假设从MongoDB获取对象,并基于它们对每个对象调用两次外部API,然后将结果保存回DB 不确定为什么整个流程在第五行中被中断(已调试标记为最后调用函数)。我试图确保所有调用的函数都是被动的。在这一点上,我不知道出了什么问题。对于反应式编程来说也是非常新的 fun fillMissingThings() { reactiveThingsRepository.findAllBySomeCondition(EMPTY) .map { i

该方法假设从MongoDB获取对象,并基于它们对每个对象调用两次外部API,然后将结果保存回DB

不确定为什么整个流程在第五行中被中断(已调试标记为最后调用函数)。我试图确保所有调用的函数都是被动的。在这一点上,我不知道出了什么问题。对于反应式编程来说也是非常新的

    fun fillMissingThings() {
        reactiveThingsRepository.findAllBySomeCondition(EMPTY)
                .map { it.name.getName() }
                .flatMap(this::fetchIdByName) <-- this method is called last
                .flatMap(this::fetchThingById)
                .flatMap { reactiveThingsRepository.save(it) }
                .subscribe()
    }

    fun fetchIdByName(name: String): Flux<String> =
            webClient.get()
                    .uri(someUrlBasedOnName)
                    .retrieve()
                    .bodyToFlux(Array<SearchIdDto>::class.java)
                    .onErrorResume { Flux.empty() }
                    .retry(3)
                    .flatMap { Flux.fromArray(it) }
                    .map { it.id!! }

    fun fetchThingById(thingId: String): Flux<Thing> =
            webClient.get()
                    .uri(someUrlBasedOnId)
                    .retrieve()
                    .bodyToFlux(ThingDto::class.java)
                    .onErrorResume { Flux.empty() }
                    .retry(3)
                    .map { it.toEntity().setDefaultValues() }
fun fillingmissingtings(){
reactiveThingsRepository.findAllBySomeCondition(空)
.map{it.name.getName()}

.flatMap(this::fetchIdByName)你所说的“中断”是什么意思?进程结束,但没有错误,也没有保存到数据库?正是这样。请参阅日志,通过webclient调用第一个请求,我得到了200个返回。但是没有发送第二个请求,也没有将任何内容保存到数据库“中断”是什么意思?进程结束,但没有错误,没有保存到db?正是这样。请参阅日志,通过webclient调用第一个请求,我返回了200。但是没有发送第二个请求,也没有将任何内容保存到db