Мне нужен условный цикл в реактивном конвейере. Пока условие истинно, цикл должен продолжаться, а как только условие станет ложным, цикл должен прекратиться и вернуть любое значение, полученное из цикла.
Mono.just(new Pair(record, order))
.flatMap(pair -> handleDelayedRoundNumber()
.flatMap(roundNumber -> handleProofRequest(pair.first(), pair.second())
.doOnSuccess(proof -> new Pair(roundNumber < order.clientMetadata().timeout(), proof))
)
).repeat(result -> result.first() && result.second() != null)
.flatMap(result -> {
if(result.second() == null){
return Mono.empty();
}
return Mono.just(result.second());
})
.flatMap(proof -> doStuffWithProof(proof));
Как мне этого добиться?
Я думаю, идею того, чего я хочу, легче объяснить нереакторным способом:
Order order = ...;
Record record = ...;
String proof;
do {
int roundNumber = handleDelayedRoundNumber();
proof = handleProofRequest(record, order);
while(roundNumber < order.clientMetadata().timeout() && proof == null);
doStuffWithProof(proof);