- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设您有 Mono<Integer> someIntegerSource = Mono.just(5)
并且您想将其分配给一个变量。
这些代码片段之间有区别吗?
案例1: doOnSuccess
someIntegerSource.doOnSuccess(number -> this.myNumber = number)
案例2: doOnNext
someIntegerSource.doOnNext(number -> this.myNumber = number)
案例3: doOnSuccess
+ then
(因为我希望在发出单声道完成之前完成分配)
someIntegerSource.doOnSuccess(number -> this.myNumber = number).then()
最佳答案
阅读该类的文档 Mono
并查看图表。差异并不像看上去那么微妙:
Mono::doOnNext
当数据发送成功时触发,这意味着数据可用且存在。Mono::doOnSuccess
当 Mono
时触发成功完成 - 结果为 T
或null
,这意味着无论数据状态如何,处理本身都会成功完成,并且尽管数据不可用或不存在但管道本身会成功,但也会执行。Mono::then
作为方法链的末尾返回 Mono<Void>
完成和错误信号。
Mono<Void>
来自Mono<T>
。请注意,上述两种方法不会丢弃有效负载。请遵循以下说明性示例:
一个Mono
保存值的触发器 doOnNext
当数据发送成功时。这可能会让 doOnSuccess
感到困惑。 ,但与此类触发相反,doOnNext
当发出任何成功值(包括空 Mono
)时触发,仍然有效。
Mono.just("Hello World")
.doOnNext(i -> System.out.println("On next: " + i))
.doOnSuccess(i -> System.out.println("On success: " + i))
.doOnError(i -> System.out.println("On error: " + i))
.block();
On next: Hello World
On success: Hello World
请记住,尽管 Mono
为空 ( Mono.empty()
),它仍然是触发 doOnSuccess
的有效响应,但不是doOnNext
,一个空Mono
可以理解为一个有效的响应,但并不代表包含有用值的所需输出。它的工作原理与Optional.empty()
相同。 。 Mono
成功,但没有真正有用的值(value)来触发 doOnNext
因为它根本不发出任何值。
Mono.empty()
.doOnNext(i -> System.out.println("On next: " + i))
.doOnSuccess(i -> System.out.println("On success: " + i))
.doOnError(i -> System.out.println("On error: " + i))
.block();
Mono.just("Hello World")
.mapNotNull(s -> null)
.doOnNext(i -> System.out.println("On next: " + i))
.doOnSuccess(i -> System.out.println("On success: " + i))
.doOnError(i -> System.out.println("On error: " + i))
.block();
两者都会产生相同的输出:
On success: null
为了完整起见,与空的 Mono
进行对比,错误也不会触发 doOnNext
或doOnSuccess
但doOnError
相反:
Mono.error(new RuntimeException("Something wrong"))
.doOnNext(i -> System.out.println("On next: " + i))
.doOnSuccess(i -> System.out.println("On success: " + i))
.doOnError(i -> System.out.println("On error: " + i))
.block();
On error: java.lang.RuntimeException: Something wrong
then
的附注方法Mono::then
不带参数或其重写变体接受 Mono<V>
丢弃之前的结果并提供新的 Mono<Void
或Mono<V>
分别。
Mono.empty()
.then()
.doOnSuccess(i -> System.out.println("On success: " + i))
.doOnError(i -> System.out.println("On error: " + i))
.block();
Mono.empty()
.then(Mono.just("Good bye"))
.doOnSuccess(i -> System.out.println("On success: " + i))
.doOnError(i -> System.out.println("On error: " + i))
.block();
Mono.just("Hello World")
.then(Mono.just("Good bye"))
.doOnSuccess(i -> System.out.println("On success: " + i))
.doOnError(i -> System.out.println("On error: " + i))
.block();
Mono.error(new RuntimeException("Something wrong"))
.then(Mono.just("Good bye"))
.doOnSuccess(i -> System.out.println("On success: " + i))
.doOnError(i -> System.out.println("On error: " + i))
.block();
Mono.error(new RuntimeException("Something wrong"))
.then(Mono.error(new RuntimeException("Something very wrong")))
.doOnSuccess(i -> System.out.println("On success: " + i))
.doOnError(i -> System.out.println("On error: " + i))
.block();
On success: null
On success: Good bye
On success: Good bye
On error: java.lang.RuntimeException: Something wrong
On error: java.lang.RuntimeException: Something wrong
关于java - Mono 的 doOnSuccess 与 doOnNext 之间有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55976963/
研究 Spring 执行器MetricsWebFilter 看到了这段代码: @Override public Mono filter(ServerWebExchange exchange, WebF
代码正在到达“填充要执行的迁移”日志。然而 AAA、EEE 和 CCC 日志均未到达,因此 doOnSuccess 内没有代码正在运行。任何有关如何解决此问题的帮助将不胜感激。 databaseCli
假设我有一个方法addVoteToSong,例如: public Mono> addVoteToSong(Principal principal, String songId, VoteKind vo
我正在审查源代码文件,发现在某些提交中我们更改了 .doOnSuccess(response -> logBodyAsJSON(response )); 进入 .doOnEach(re
Java 8 io.reactivex:rxjava:1.3.6 kotlin 1.2.21 我正在尝试使用 Single 在 doOnSuccess 中传递参数。 但是,我遇到了一个错误,我似乎无法
假设您有 Mono someIntegerSource = Mono.just(5)并且您想将其分配给一个变量。 这些代码片段之间有区别吗? 案例1: doOnSuccess someIntegerS
在以前版本的 API 中,我使用 Mono 作为返回类型。当一切正常时,我登录了 doOnSuccess 方法。 API 方法返回类型更改为 Flux 后,我无法使用 doOnSuccess 进行日志
我对 rxJava 中 doOnSuccess 的用例感到困惑。 让我们看看代码: 案例一: networkApi.callSomething() .subscribeOn(Scheduler
我正在尝试实现 Reactor Subscriber Context ( http://projectreactor.io/docs/core/release/reference/#context )
我是一名优秀的程序员,十分优秀!