我想在先前返回时调用该方法 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!");
}
如何在 sendEmail
返回 Mono<Void>
之后调用 doOnNext
或类似方法?
原文由 kostepanych 发布,翻译遵循 CC BY-SA 4.0 许可协议
doOnNext
,一般来说所有doOn*
反应器方法都是副作用方法。您不应该调用它们来执行 I/O 工作或链操作,而是记录事情而不做任何会影响应用程序状态的事情。在您的代码示例中,
notificationLogReactiveRepository.save
返回Mono<Void>
。saveNotificationLog
返回void
并且不订阅notificationLogReactiveRepository.save
返回的发布者。这意味着通知不会被保存,因为 在您订阅之前什么都不会发生。在这种情况下,您似乎正在尝试链接操作 -
then
运营商就是为此而生的。您的代码应如下所示: