While循环
while组件:条件循环节点。只要满足指定的条件,就会重复执行目标节点或规则链。
# 配置
| 字段 | 类型 | 说明 | 默认值 |
|---|---|---|---|
| condition | string | 循环条件表达式,使用 el 表达式。例如 msg.count==nil \|\| msg.count < 5。 | |
| do | string | 每次迭代执行的节点ID或子规则链ID。 | |
| mode | int | 循环结束后结果处理方式,0 - 忽略(输出原始消息),1 - 追加合并,2 - 覆盖传递 | 0 |
mode
- 0(忽略) - 不修改原始消息,输出进入循环前的原始消息内容。
- 1(追加) - 将每次循环迭代产生的 msg.Data 合并为一个 JSON 数组作为最终输出,保留最后一次循环的 metadata。
- 2(覆盖) - 使用最后一次循环迭代产生的结果(Data 和 Metadata)直接覆盖并输出。
提示
与 For 节点的区别: While 节点的每次迭代必须将上一次的结果(包含被修改的 metadata 等)传递给下一次迭代,以推动 condition 的条件发生变化(避免死循环)。它是一种状态连续的条件循环。
而 For 节点通常在每次迭代时提供隔离的上下文。
# Relation Type
- Success: 循环结束后,消息将沿
Success链路径传递。 - Failure: 如果表达式执行出错或迭代过程中出错,消息将沿
Failure链路径传递。
# 执行结果
循环内部,上一次迭代的执行结果作为下一次迭代的输入。
当条件不满足导致循环结束时,根据配置的 mode 输出最终消息:
- 如果
mode=0,直接向后输出刚进入组件时的原始消息。 - 如果
mode=1,将各次迭代产生的结果组装为数组并覆盖到最后一条消息上输出。 - 如果
mode=2,直接向后输出最后一次迭代的结果。
# 迭代上下文变量
在迭代过程中,组件会设置以下元数据变量:
_loopIndex: 当前迭代索引(从0开始)。
# 终止循环
如果在迭代过程中,消息元数据包含 _break 且值为 true,则会立即终止循环。
# 配置示例
{
"id": "s1",
"type": "while",
"name": "While循环",
"configuration": {
"condition": "msg.count==nil || msg.count < 5",
"do": "s2"
}
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
在 GitHub 上编辑此页 (opens new window)
上次更新: 2026/04/17, 09:15:29