s.equals("a") ? Mono.error(new RuntimeException() : Flux.j-6ren">
gpt4 book ai didi

java - 项目 react 堆: onErrorResume after flatMap

转载 作者:行者123 更新时间:2023-12-01 07:01:12 24 4
gpt4 key购买 nike

Flux.just("a", "b")
.flatMap(s -> s.equals("a") ? Mono.error(new RuntimeException() : Flux.just(s + "1", s + "2"))
.onErrorResume(throwable -> Mono.empty())
.subscribe(System.out::println);

你好!

在这里,我制作了两个元素的通量,然后通过 flatMap 将第一个元素暴露给异常,将第二个元素暴露给另一个通量。

使用onErrorResume我期望输出

b1
b2

但什么也没得到。谁能解释一下为什么会发生这种情况?

谢谢。

最佳答案

鉴于此:

Flux.just("a", "b", "c")
.flatMap { s ->
if (s == "b")
Mono.error<RuntimeException>(RuntimeException())
else
Flux.just(s + "1", s + "2")
}.onErrorResume { throwable -> Mono.just("d") }.log()
.subscribe { println(it) }

输出为:

12:35:19.673 [main] INFO reactor.Flux.OnErrorResume.1 - onSubscribe(FluxOnErrorResume.ResumeSubscriber)
12:35:19.676 [main] INFO reactor.Flux.OnErrorResume.1 - request(unbounded)
12:35:19.677 [main] INFO reactor.Flux.OnErrorResume.1 - onNext(a1)
a1
12:35:19.677 [main] INFO reactor.Flux.OnErrorResume.1 - onNext(a2)
a2
12:35:19.712 [main] INFO reactor.Flux.OnErrorResume.1 - onNext(d)
d
12:35:19.713 [main] INFO reactor.Flux.OnErrorResume.1 - onComplete()

这是怎么回事? onErrorResume() 正在应用于 flatMap() 运算符返回的发布者。由于在“b”上发布者发出失败信号,因此 flatMap() 发布者不再执行,并且 onErrorResume() 运算符使用其后备继续发布。

documentation for onErrorResume()清楚地显示原始发布者由于错误而完成,并且后备接管:

enter image description here

关于java - 项目 react 堆: onErrorResume after flatMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49431554/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com