网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

CompletableFuture的thenApply和handle的区别是什么

这篇文章给大家介绍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和handleAsync的差异: thenApplyAsync是在当前stage正常完成后才会执行,如果有异常抛出则抛出异常不进入。所有以then开始的方法同此原理。 handleAsync无论是否异常抛出都会进入,并且返回结果不能够继续抛出异常。使用此方法将会吞噬上一阶段的异常。

关于CompletableFuture的thenApply和handle的区别是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


名称栏目:CompletableFuture的thenApply和handle的区别是什么
链接URL:http://bjjierui.cn/article/jipggj.html

其他资讯