В ожидании дополнительной информации об API QueryResponse
я собираюсь предположить несколько вещей: - getDataByName
возвращает Mono<QueryResponse>
. Это Mono
ВСЕГДА оценивается, ie всегда выдает ровно один QueryResponse
, либо данные не найдены - QueryResponse#items
- это то, что я буду использовать в своем примере для доступа к собственно строкам. Я также предполагаю, что он возвращает Flux<Item>
Во-первых, filterWhen
здесь бесполезен, поскольку у нас также есть метод filter(boolean)
. Я думаю, что логику обратного фильтра c, возможно, немного сложнее понять.
Почему бы не сделать все в flatMap
вместо этого?
private fun checkExistingData(name: String): Mono<QueryResponse> {
return repo.getDataByName(name)
.flatMap {
if (it.hasItems())
it.items()
.single()
.doOnNext(existing -> logExisting(existing.id(), existing.name())
.then(Mono.error(SomeCustomException)
else
proceed()
}
}