🍒前置和后置组件
LiteFlow支持了前置组件和后置组件特性。
此特性针对整个链路,在链路之前之后固定执行某些组件。用于业务的前置处理和后置处理。
前置组件和后置组件,均为串行节点,目前不支持异步。
# 前置组件
固定在一个流程开始之前执行某些节点,规则表达式中用PRE
关键字(必须大写)来表示:
<chain name="chain1">
THEN(
PRE(p1, p2),
a, b, c,
WHEN(d, e)
);
</chain>
# 后置节点
固定在一个流程结束后执行某些节点,要注意的是后置节点不受Exception影响,即便节点出错,后置节点依旧会执行。在规则表达式中用FINALLY
关键字(必须大写)表示:
<chain name="chain1">
THEN(
a, b, c,
FINALLY(f1, f2)
);
</chain>
# 顺序问题
前置节点一定要写在前面吗?后置节点一定要写在最后吗?
并不是,PRE
和FINALLY
可以写在任意地方。
举个例子:
<chain name="chain1">
THEN(
PRE(a), c, d, FINALLY(f1, f2)
);
</chain>
下面这个表达式和上面是等价效果的, 即使不放在相对应的位置,还是一样的效果。
<chain name="chain1">
THEN(
FINALLY(f1, f2), c, PRE(a), d
);
</chain>
# 层级和范围
LiteFlow 2.9.5中能支持PRE
和FINALLY
写在表达式的任意层级。也意味着你在子流程中,子变量中也可以用前置和后置组件。
提示
PRE
和FINALLY
只能写在THEN
表达式中,如果你写在WHEN
表达式中或者其他诸如SWITCH
,IF
的表达式中,是不会生效的,而且这样写也是毫无意义的。这点需要注意下。
比如你可以这么写:
<chain name="chain6">
c1 = THEN(PRE(p1, p2), THEN(a, b, c), FINALLY(f1, f2));
THEN(PRE(p1, p2), c1, FINALLY(f1));
</chain>
最终执行结果就是:
p1==>p2==>p1==>p2==>a==>b==>c==>f1==>f2==>f1
帮助我们改善此文档 (opens new window)
上次更新: 2023/08/04, 17:02:03