java - 如何使用项目reactor实现调用重复直到满足特定条件?

有没有办法使用项目 reactor 来做这样的事情?

fetchSystemUpdates() // return Mono<List<>>
   .repeatUntil(List::isNotEmpty)
   .map(...) // when its not empty do some processing

回答1

实现它的一种方法是使用 expand 重复请求,直到收到非空列表并在下游过滤掉空结果。

fetchSystemUpdates()
        // repeat until results are not empty
        .expand(res -> {
            if (!res.isEmpty()) {
                return Mono.empty(); // stop "repeat loop"
            }

            return fetchSystemUpdates()
                // add delay before making subsequent call  
                .delaySubscription(Duration.ofMillis(1000));
        })
        .filter(res -> !res.isEmpty()) // filter out non-empty results
        .single() // convert Flux to Mono
        .map(...); // when its not empty do some processing
    }