🌳循环编排
版本支持:v2.9.0+
LiteFlow提供了循环编排表达式组合。
# FOR循环
FOR循环表达式用于固定次数的循环,通常的用法为:
<chain name="chain1">
FOR(5).DO(THEN(a, b));
</chain>
上述表达式表示把a->b这个链路固定循环了5次。
如果你在定义规则的时候并不确定要循环几次,要在代码运行的时候才知道。那你也可以这样定义:
<chain name="chain1">
FOR(f).DO(THEN(a, b));
</chain>
其中f这个节点需要为次数循环组件,返回一个int循环次数,如何定义请参照次数循环组件。
# WHILE循环
WHILE循环表达式用于有条件的循环,通常用法为:
<chain name="chain1">
WHILE(w).DO(THEN(a, b));
</chain>
其中w这个节点需要为布尔组件
,返回一个布尔值,为true则继续循环,如何定义请参照布尔组件。
# ITERATOR迭代循环
ITERATOR迭代循环表达式通常用于集合的循环,通常用法为:
<chain name="chain1">
ITERATOR(x).DO(THEN(a, b));
</chain>
其中x这个节点需要为迭代循环组件,返回一个迭代器,如何定义请参照迭代循环组件。
提示
要注意的是,迭代循环组件只支持java定义,不支持脚本。
# BREAK
LiteFlow同样也支持BREAK语法,代表退出循环。
BREAK关键字可以跟在FOR和WHILE后面,通常用法为:
<chain name="chain1">
FOR(f).DO(THEN(a, b)).BREAK(c);
</chain>
<chain name="chain1">
WHILE(w).DO(THEN(a, b)).BREAK(c);
</chain>
其中c这个节点需要为布尔组件
,返回一个布尔值,为true则退出循环。如何定义请参考布尔组件。
提示
BREAK关键字是在每次循环的末尾进行判断的。
# 多层嵌套循环中获取下标v2.12.3+
如果在一个3层嵌套循环里:
<chain name="chain1">
FOR(x).DO(
FOR(y).DO(
FOR(z).DO(
THEN(a,b)
)
)
);
</chain>
a组件要取到当前循环下标:this.getLoopIndex()
或者this.getPreNLoopIndex(0)
,这2者是等价的
a组件要取到第二层循环下标:this.getPreLoopIndex()
或者this.getPreNLoopIndex(1)
,这2者是等价的
a组件要取到第一层循环下标:this.getPreNLoopIndex(2)
唯一要关注的就是getPreNLoopIndex
这个方法,里面的数字代表了往前取多少层,数字0就代表了当前层。以此类推。
# 多层嵌套循环中获取迭代对象v2.12.3+
如果在一个3层嵌套循环里:
<chain name="chain1">
ITERATOR(x).DO(
ITERATOR(y).DO(
ITERATOR(z).DO(
THEN(a,b)
)
)
);
</chain>
a组件要取到当前迭代对象:this.getCurrLoopObj()
或者this.getPreNLoopObj(0)
,这2者是等价的
a组件要取到第二层迭代对象:this.getPreLoopObj()
或者this.getPreNLoopObj(1)
,这2者是等价的
a组件要取到第一层迭代对象:this.getPreNLoopObj(2)
唯一要关注的就是getPreNLoopObj
这个方法,里面的数字代表了往前取多少层,数字0就代表了当前层。以此类推。
# 脚本中获取循环下标和迭代对象
具体内容请参照脚本与Java进行交互中的元数据获取方式之二
。
# 异步循环v2.11.0+
LiteFlow支持了异步循环特性,关于异步循环请参考高级特性中的异步循环模式。