java - 返回 Mono<Void> 后的方法调用

标签 java reactive-programming spring-webflux project-reactor

我想在 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!"); 
}

如何调用doOnNextsendEmail 之后的类似方法返回 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/

相关文章:

spring - 有没有办法在spring webflux和spring data reactive中实现分页

java - 使用 Java 应用 XSL 样式表,输出缩进不正确

c# - 使用 Reactive Extensions 在 TextChanged 上搜索

java - RX-java2 重复消耗 Observable

c# - 响应式扩展 - 以同步方式刷新 Subject/IObservable

java - Spring WebFlux WebClient timeout() 和 exchange()

java - Webflux Reactive 对象在渲染 Thymeleaf View 之前未解析

java - 将行分割为数组项 - 对于目录中的所有文件 - 可能会出现错误循环

java 多个项目 ClassNotFoundException

java - Android Studio Java转换值应用程序不断崩溃