Kyo*_*Lee 2 kotlin project-reactor spring-webflux
Flux 上的 flatMap 总是顺序的吗?我知道在 flatMap 中使用 then 函数返回通量时它不是顺序的。 项目反应器平面图
但是如果 flatMap 中使用的函数返回单声道,它是否总是顺序的?
假设我有一个函数,它接受一个对象并只返回 Mono。
fun aFunction(foo: Int): Mono<Int> {
return (foo + 1).toMono()
}
Run Code Online (Sandbox Code Playgroud)
然后
Flux.just(1,2,3,4)
.flatMap{ aFunction(it) }
Run Code Online (Sandbox Code Playgroud)
总是返回 2,3,4,5?
不,aflatMap不是连续的。A急切地flatMap订阅内部流。以下是其工作原理的摘要:
由于这些内部订阅是并行发生的,因此无法保证哪个内部流将onComplete首先发出。因此,没有订购保证。
concatMap另一方面提供排序保证(按照从上游接收事件的确切顺序)。这是因为它仅在前一个流发出onComplete.
这是我不久前写的一篇文章flatMap:https :
//medium.com/swlh/understanding-reactors-flatmap-operator-a6a7e62d3e95
注意:您很可能会在输出中看到 2,3,4,5。这是因为您的调用是同步的。但不能保证,您永远不应该依赖flatMap任何类型的订购要求。
| 归档时间: |
|
| 查看次数: |
826 次 |
| 最近记录: |