当前位置: 首页 > 知识库问答 >
问题:

项目Reactor平面图顺序是连续的吗?

司马萧迟
2023-03-14

通量上的平面图总是连续的吗?我知道在flatMap返回通量中使用then函数时不是顺序的。项目Reactor平面图

但是如果flatMap中使用的函数返回mono,它是否总是顺序的?

假设我有一个函数,它接受一个对象,只返回Mono。

fun aFunction(foo: Int): Mono<Int> {
    return (foo + 1).toMono()
}

然后呢

Flux.just(1,2,3,4)
    .flatMap{ aFunction(it) }

总是返回2,3,4,5?

共有1个答案

拓拔欣嘉
2023-03-14

否,flatMap不是顺序的。flatMap急切地订阅内部流。以下是其工作原理的总结:

  1. 从上游接收事件
  2. 从中创造出一个内在的流
  3. 订阅它
  4. 从上游接收下一个事件
  5. 从2开始重复
  6. 合并所有这些内部流中的事件

由于这些内部订阅是并行发生的,因此不能保证哪个内部流将首先发出on完整。因此,没有订购保证。

concatMap在另一方面给出了排序保证(在它从上游接收事件的确切顺序)。这是因为它只有在前一个流发出on完整后才订阅下一个流。

这是我不久前在flatMap上写的一篇文章:https://medium.com/swlh/understanding-reactors-flatmap-operator-a6a7e62d3e95

注意:输出中很可能会出现2,3,4,5。当你的通话是同步的时,就会发生这种情况。但这并不能保证,对于任何类型的订购要求,您都不应该依赖flatMap

 类似资料:
  • 我从留档中读到: 将该流量发出的元素异步转换为发布者,然后通过合并将这些内部发布者平坦化为单个流量,从而允许它们交错。 那个: 将此流量发出的元素异步转换为发布者,然后将这些内部发布者平坦化为单个流量,但按其源元素的顺序合并它们。 并且: 将此流量发出的元素异步转换为发布者,然后将这些内部发布者展平为单个流量,顺序并使用串联保持顺序。该运算符有三个维度可以与flatMap和flatMapSeque

  • 我继续玩Retor,现在我看到运算符的行为完全类似于,我想知道是否有任何我不明白的区别。 这两个示例的行为和返回的结果相同。 问候。

  • 我已经找到了很多关于RxJava的答案,但我想了解它在Reactor中是如何工作的。 我目前的理解是非常模糊的,我倾向于认为map是同步的,flatMap是异步的,但我不能真正理解它。 以下是一个例子: 我有文件(a

  • 你好 在这里,我做了两个元素的通量,然后通过平面图公开第一个异常,第二个通量。 使用onErrorResume,我希望输出 但什么也得不到。谁能解释一下为什么会这样? 谢谢

  • 假设我有这样的代码: 输出是相同的线程名称,所以这里没有的好处--我的意思是有一个线程来完成所有的工作。 在内部有以下代码: 我理解强制属性如果“outer”流将是并行的(它们可能会阻塞),“outer”将不得不等待“flatmap”完成,反过来(因为使用了相同的公共池),但为什么总是强制这样做呢? 这是一个可以在以后的版本中改变的东西吗?

  • Floorplan 是 Home Assistant 最受瞩目的衍生项目之一。其作用是衔接房屋平面图与Home Assistant 智能家居,打造活点地图般的控制界面。