我想在 previous 返回时调用该方法 Mono<Void>
:
@Override
public Mono<Void> sendEmail(EmailDto emailDto) {
return mailReactiveClient.sendEmail(message ->
createMessage(emailDto, emailDto.getBody(), message))
.doOnNext(saveNotificationLog(emailDto)); //it's not work
}
private void saveNotificationLog(EmailDto emailDto) {
notificationLogReactiveRepository.save(NotificationLog.builder()
...
.build());
}
方法sendEmail
返回 Mono<Void>
.
那么如何调用saveNotificationLog
?
UPD: 尝试简化我的问题:
@Override
public Mono<Void> sendEmail(EmailDto emailDto) {
return mailReactiveClient.sendEmail(message ->
createMessage(emailDto, emailDto.getBody(), message))
.doOnNext(System.out.print("Hello world!");
}
如何调用doOnNext
或 sendEmail
之后的类似方法返回 Mono<Void>
?
最佳答案
Mono 不会发出数据,所以 doOnNext
不会被触发。您应该改用 doOnSuccess
。
此外,您的 Mono 需要被消耗。没有代码,我们不知道是不是。
这里有一些例子:我添加了 subscribe()
来使用单声道。根据 Mono 的用途,您将不得不做或不做同样的事情。
这什么都不打印:
Mono<String> m=Mono.just("test");
Mono<Void> v=m.then();
v.doOnNext(x->System.out.println("OK")).subscribe();
这个打印“OK”:
Mono<String> m=Mono.just("test");
Mono<Void> v=m.then();
v.doOnSuccess(x->System.out.println("OK")).subscribe();
关于java - 返回 Mono<Void> 后的方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51515306/