🎃捕获异常表达式
LiteFlow从2.10.0开始,EL表达式语法中新增了捕获异常的表达式
# 基本用法
具体用法为CATCH
...DO
:
<chain name="chain1">
CATCH(
THEN(a,b)
).DO(c)
</chain>
上述语法表示,如果a组件出现异常并抛出,则不会执行b组件,会直接执行c组件。
在c组件中,可以通过this.getSlot().getException()
来获取异常。
同时,当用了CATCH
表达式之后,即便在CATCH
包裹的组件有异常抛出,整个流程返回的LiteflowResponse
中的isSuccess
方法仍然为true
,getCause
中也没有任何的Exception。如果你写过java程序,应该会对这样的机制很容易理解。因为异常已经被你自己处理掉了。
同时CATCH
也可以不加DO
,比如:
<chain name="chain1">
THEN(
CATCH(
THEN(a,b)
),
c
)
</chain>
上面这段表达式不管a,b有没有抛出异常,最终总会执行c。如果a抛出异常,那么最终执行链路就为a==>c
# 搭配循环使用
CATCH
表达式和循环表达式搭配起来使用,还能做出java中continue
的效果,比如:
<chain name="chain1">
FOR(x).DO(
CATCH(
THEN(a,b,c)
)
)
</chain>
如果你希望在b组件中达成某一个条件就不执行c,继续循环,那么你可以借助CATCH
语法,只要在b组件中往外抛一个异常即可。
我相信这种用法对于写程序的同学来说,应该不用过多解释。
帮助我们改善此文档 (opens new window)
上次更新: 2023/08/04, 17:02:03