【问题标题】:Should Mono<T>.materialize return Flux<Signal<T>>?Mono<T>.materialize 是否应该返回 Flux<Signal<T>>?
【发布时间】:2017-05-29 01:54:29
【问题描述】:

根据Mono&lt;T&gt;.materialize()上的Javadoc:

将传入的 onNext、onError 和 onComplete 信号转换为 Signal。由于错误被具体化为信号,因此将停止传播并发出 onComplete。完成信号将首先发出一个 Signal.complete() 然后有效地完成通量。

这意味着materialize返回的Publisher在没有错误发生时至少应该发出2个信号:

  • Signal.next
  • Signal.complete

但是这个方法的返回类型是Mono&lt;Signal&lt;T&gt;&gt;,它只允许发出单个事件。所以我很困惑。代码应该是

Flux<Signal<Integer>> mono = Mono.just(1).materialize();
StepVerifier.create(mono)
    .expectNext(Signal.next(1))
    .expectNext(Signal.complete())
    .verifyComplete();

【问题讨论】:

  • 我猜第一行缺少;,下面的意图太多了,对吧?
  • 谢谢,我补充了。

标签: java project-reactor


【解决方案1】:

Mono 中,materialize 只发出一个Signal。 Mono 上只能出现 3 种情况:

  1. 单声道成功且重视:发出Signal.next(value)
  2. 单声道成功但为空Signal.complete() 已发出
  3. 单声道错误Signal.error(throwable) 发出

【讨论】:

  • 如果是这种情况,应该改进 Javadoc,因为它误导我认为返回应该是 Flux
猜你喜欢
  • 2021-03-09
  • 1970-01-01
  • 1970-01-01
  • 2019-03-26
  • 2022-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-03
相关资源
最近更新 更多