从品牌网站建设到网络营销策划,从策略到执行的一站式服务
这篇文章给大家介绍CompletableFuture的thenApply和handle的区别是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名注册、虚拟空间、营销软件、网站建设、房山网站维护、网站推广。
1、在改造mybatis-r2dbc的过程中,要将结果返回为CompletableFutrue。
2、当查询单个字段信息且不包装为pojo类型时,是不能返回null对象的,因为sink.next方法不支持null对象。但实际场景是存在返回null的。
3、为规避sink.next不能返回null,故将null对象包装为一个自定义的枚举类。mybatis-r2dbc接收这个枚举对象后进行进一步处理,将枚举对象再转换为null返回。处理过程是在CompletableFuture.handleAsync方法进行。
使用handleAsync处理返回null的问题确实可以解决sink.next不能返回null对象的问题。但是也引入了另一个问题,就是当底层驱动发生Exception的时候,返回的对象也是null,使用handleAsync处理后,异常会被吞噬掉,不能向外抛出。即使用handleAsync后,驱动的异常将全部被吞噬,返回数据为null,上层应用也无法感知到错误原因。
将handleAsync方法替换为thenApplyAsync。
对比 thenApplyAsync和handleAsync的差异: thenApplyAsync是在当前stage正常完成后才会执行,如果有异常抛出则抛出异常不进入。所有以then开始的方法同此原理。 handleAsync无论是否异常抛出都会进入,并且返回结果不能够继续抛出异常。使用此方法将会吞噬上一阶段的异常。
关于CompletableFuture的thenApply和handle的区别是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
成都网站建设公司地址:成都市青羊区太升南路288号锦天国际A座10层 建设咨询028-86922220
成都快上网科技有限公司-四川网站建设设计公司 | 蜀ICP备19037934号 Copyright 2020,ALL Rights Reserved cdkjz.cn | 成都网站建设 | © Copyright 2020版权所有.
专家团队为您提供成都网站建设,成都网站设计,成都品牌网站设计,成都营销型网站制作等服务,成都建网站就找快上网! | 成都网站建设哪家好? | 网站建设地图