在递归调用中解压 Mono?

问题描述 投票:0回答:0

我正在处理一个应该调用下游服务的服务,根据下游服务的响应,我的下一个递归将被调用。

这里是示例代码供参考

private fun rec(storeId: Int, listOfMonos: ArrayList<Mono<*>>, visited: HashSet<CartesianCoordinate>, previousCartesianCoordinate: CartesianCoordinate?, destinations: List<PathingCartesianPosition>) {
    if(visited.size == destinations.size)
        return
    val currentCoordinate = findClosestCoordinate(destinations, previousCartesianCoordinate, visited)
    var startingCoordinate = previousCartesianCoordinate
    currentCoordinate.first?.let { visited.add(it) }
    val queryString = ObjectMapper().writeValueAsString(currentCoordinate.first?.let {
        previousCartesianCoordinate?.let { it1 ->
            PathServiceQuery(
                it1,
                it
            )
        }
    })
    listOfMonos.add(webClient.getPath(storeId, queryString, currentCoordinate.second))

    listOfMonos.last {
        println("YY")
        it.flatMap { x ->
            println("ZZ")
            if(!(x as PathingCartesianResponse).coordinates.isNullOrEmpty()) {
                println("XX")
                currentCoordinate.first?.let { it1 -> startingCoordinate = it1 }
            }
            Mono.just(x)
        }
        true
    }
    rec(storeId, listOfMonos, visited, startingCoordinate, destinations)
}

下游服务通过

webClient
调用,它返回一个
Mono
。 我只需要检查它是否返回空响应。 这只能通过阻塞来实现吗?

正如您在此处看到的,仅打印了

YY
,而不是
XX
ZZ
。不阻塞就可以做到吗?

java kotlin reactive-programming project-reactor
© www.soinside.com 2019 - 2024. All rights reserved.