Skip to main content

Try-Catch介绍

try-catch提供异常处理机制,可以对规则链中某些规则执行发生异常做相关的补偿措施和业务化的异常提示信息。

1. 概念

​ 规则链定义提供try-catch逻辑块:可以在规则链配置界面中新增try-catch配置项,使用try节点的下级包装规则链中的规则块,当规则块执行存在异常,在try下方有同级的catch节点,在catch节点的下级可以包装规则块,用于执行异常捕获后的处理逻辑。

  • try-catch逻辑块是成对出现的,catch必须要依附于try之后的同级节点。
  • try-catch支持多层嵌套,多层嵌套try-catch时候,会包内层try-catch当做是一个完整的规则链进行执行
  • try块中填入需要捕获异常的规则逻辑块
    • 当try中的规则逻辑块运行时出现异常,系统会自动调用catch中的规则逻辑块进行异常处理。
    • try中可以不设置任何规则,若不设置,执行的时候不会触发catch的执行,相当于直接跳过try-catch块,继续往下执行。
  • catch块中填入需要处理异常的规则逻辑块
    • catch中可以不设置任何规则,若不设置,执行的时候若出现异常,则不进行任何的异常处理,且原始异常会被"吃掉",如果使用不当容易出现问题难查,所以开发平台应该在catch为空的时候作出必要的提示,让用户尽量配置异常处理逻辑。

注意:基于实际的业务需求,当前版本仅提供服务端规则链的try-catch,客户端规则链待后续迭代实现。

2. 使用场景

【案例下载】

2.1 Try-Catch基本场景

基础语法:

image-20220524145238114

try-catch逻辑块是成对出现的,catch必须要依附于try之后的同级节点。

当try中的规则逻辑块运行时出现异常,系统会自动调用catch中的规则逻辑块进行异常处理。

不设置try:

image-20220524145201008

try中可以不设置任何规则,若不设置,执行的时候不会触发catch的执行,相当于直接跳过try-catch块,继续往下执行。

不设置catch:

image-20220524145216504

catch中可以不设置任何规则,若不设置,执行的时候若出现异常,则不进行任何的异常处理,且原始异常会被"吃掉",如果使用不当容易出现问题难查,所以开发平台应该在catch为空的时候作出必要的提示,让用户尽量配置异常处理逻辑。

2.2 Try-Cath基本场景(嵌套)

image-20220524144402624

2.3 Try-Cath基本场景(异常中断规则)

image-20220524144535220

2.4 Try-Cath基本场景(事务中断)

事务中断场景:

场景1:

catch中执行过程中没有出现异常的,try中已执行的不会回滚

image-20220524145328192

场景2:

catch中主动执行中断异常规则,catch已执行的不回滚,try中执行的会回滚

image-20220525111528608

场景3:

catch中有非中断异常规则引起的异常,catch和try中已执行的都会回滚

image-20220525111852771

异常中断规则:

是否沿用原始异常信息选项会导致前端抛异常、webapi返回异常的内容信息不相同。

异常信息不一样的通常需要拦截内层异常,以自己的业务异常文字描述来代替,就设置不沿用原始异常信息只是在catch中做补偿逻辑。

如果异常继续往外抛出,不需要修改异常信息的,就设置沿用原始异常信息即可。

沿用原始异常信息:

原始的异常信息继续往外抛,就像写代码的throw e;

image-20220525112448676

异常详情参考:平台异常编码表

不沿用原始异常信息:

自定义新的业务异常信息往外抛出,就像写代码的throw new BusinessException("xxxxx发生错误xxxx");

image-20220525112348393

2.5 Try-Cath基本场景(循环嵌套)

内层:

image-20220524145014523

外层:

image-20220524145352623