我想发出的元素彼此延迟一段时间,没有初始延迟。
我不能使用
Flux.delayElements(Duration)
因为它延迟了第一个元素之前的初始延迟,这在我的例子中是不期望的。
考虑使用example
Flux.range(1, n)
我想有以下场景:
1 delay 2 delay 3 delay…
Flux.delayElements
的当前版本是这样工作的:
延迟1延迟2延迟3…
我当前的解决方法
Flux.interval(
Duration.ZERO,
Duration.ofSeconds(1)
)
// make some call
,但它会导致类似的问题:Spring WebFlux(反应器)。当zipWith -由于缺乏请求而无法发出tick时出错
对于这种情况,你能提出一些其他的解决方案吗?或者也许应该提出一个问题,在Flux
中引入新的方法来涵盖它?
您可以使用Mono.delay()
来控制延迟
@Test
void test() {
var stream = Flux.range(1, 10)
.concatMap(i ->
Mono.delay(Duration.ofSeconds(i))
.thenReturn(i)
)
.log();
StepVerifier.create(stream)
.thenConsumeWhile(rec -> true)
.verifyComplete();
}