flatMapSequentialDelayError 或...的误导性项目反应器文档图像?

misleading project reactor documentation image for flatMapSequentialDelayError, or ...?

我在图片上看到过很多次了,就是完全不明白。这是 javadoc:

https://projectreactor.io/docs/core/release/api/reactor/core/publisher/Flux.html#flatMapSequentialDelayError-java.util.function.Function-int-int-

有问题的图片(抱歉,无法直接显示)

https://projectreactor.io/docs/core/release/api/reactor/core/publisher/doc-files/marbles/flatMapSequentialWithConcurrencyAndPrefetch.svg

谁能解释一下,为什么会有1个红色方框?为什么它的内部 Flux 这么快就完成了?如果仍然发出紫色,基于什么(在原始通量中)?我错过了什么?

据我所知,图像是正确的。

What am I missing?

您似乎假设 flatMapSequential() 调用以某种方式影响通量何时结束,或者何时发出它们的元素 - 红色通量仅在一个元素后结束,其他元素持续两个。事实并非如此 - 这只是一个示例,说明当您调用 flatMapSequential() 恰好以这种方式运行的通量时会发生什么。

如果有帮助,请想象它们是 3 个通量 return 从查询中获取数据库记录。绿色通量首先被订阅,然后它 return 是一个结果(但没有完成,因为它还有另一个记录到 return 仍然。)然后红色通量被订阅,returns 一个结果并完成(因为只有一个记录匹配查询。)然后订阅紫色通量,returns 一个结果,然后绿色和紫色通量 return 另一个结果,然后两者完成。

在这种情况下,如果红色通量 没有 完成,那么紫色通量将不会被订阅,直到至少绿色或红色通量之一完成(因为在这种情况下最大并发是 2。)因此,为示例选择以这种方式运行的通量可以使图像简洁,并直观地展示“顺序”和“最大并发”元素。