解决响应式编程Mono中的doOnNext未被执行,以及与doOnSuccess区别

解决响应式编程Mono中的doOnNext内容未被执行的问题:


遇到的场景是,需要首先使用一个Mono数据流执行一套异步操作,捕获异步的相应,将响应同步的返回,可以简化为一个方法中需要使用两个Mono数据流,而一个return只会订阅消费一次,怎么解决两个Mono都被订阅的问题

问题描述

例如:代码如下所示:此时stu.doOnNext()整个流程不会被执行

@PostMapping("/testBefore")
public Object testMono(@RequestBody @Validated Mono<Student> stu) {
    stu.doOnNext(p -> {
        p.setAge(20);
        System.out.println("里面是" + p.toString());
        System.out.println("执行了吗");
    }).subscribe();
    return Mono.just(new Student("lisi", 18));
}

结果如下,控制台未输出任何内容,可以得知stu.doOnNext内部未被执行:
在这里插入图片描述


原因分析:

1、不能直接使用stu对象进行调用Mono的方法,应使用Mono.just对原数据进行封装
2、Mono的doOnNext()允许我们附加一个侦听器,该侦听器将在发出数据时触发,而str.doOnNext没有任何数据发出,这里修改为对数据是否发出没有要求的doOnSuccess方法,doOnSuccess附加一个监听器,该监听器将在Mono 成功完成时触发,即使没有发出任何数据, Mono也被认为已成功完成


解决方案:

源代码修改为:

@PostMapping("/testMono")
public Object testMono(@RequestBody @Validated Student stu) {
    Mono.just(stu).doOnSuccess(p -> {
        p.setAge(20);
        System.out.println("里面是" + p.toString());
        System.out.println("执行了吗吗");
    }).subscribe();
    return Mono.just(new Student("lisi", 18));
}

结果如下
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值