没有初始延迟的Flux delayElements



我想发出的元素彼此延迟一段时间,没有初始延迟。

我不能使用

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();
}

最新更新