🍒前置和后置组件
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>
那什么叫第一层,请看以下例子:
<chain name="chain1">
THEN(
a, THEN(PRE(b,c), d)
);
</chain>
以上这个例子,PRE
是不会被执行的。因为在第二层。只有在第一层的PRE
和FINALLY
才有效。
# 作用范围
值得一提的是,PRE
和FINALLY
的作用范围是当前的Chain。
这也意味着如果你在子流程里用PRE
和FINALLY
,只会对子流程生效。
可以看下以下这个例子:
<chain name="chain1">
THEN(PRE(p1, p2), chain2, FINALLY(f1));
</chain>
<chain name="chain2">
THEN(PRE(p3), a, b, FINALLY(f2));
</chain>
如果正常执行,得到的步骤应该是这样的:
p1=>p2=>p3=>a=>b=>f2=>f1
帮助我们改善此文档 (opens new window)
上次更新: 2022/10/07, 00:22:18