退出循环节点
退出循环节点允许你在循环完成所有迭代之前提前退出。这在需要基于条件停止处理或找到所需结果时非常有用。
使用场景
典型应用
- 提前退出 - 满足条件时停止循环
- 搜索操作 - 找到目标项目时退出
- 错误恢复 - 错误过多时退出
- 条件终止 - 基于业务逻辑停止
- 性能优化 - 提前退出以节省资源
重要限制
仅限循环作用域
退出循环节点只能在循环与迭代节点内使用。
- 必须连接到循环开始输出端口
- 不能在循环外使用
- 只有循环内的节点可以连接到退出循环节点
节点配置
退出循环节点的配置非常简单 - 它只需在执行时退出循环。
端口和连接
输入端口
- Input (端口 0)
- 只能单连接 (
allowMultiple: false) - 主输入触发器
- 位置:左侧
- 只能单连接 (
输出端口
- 错误输出
- 处理执行期间的错误
- 标准错误处理端口
注意:退出循环节点没有常规输出端口。执行时,它会立即退出循环,执行从循环节点的"完成"输出继续。
工作原理
执行流程:
循环与迭代节点 → [循环开始] → 节点 A → 节点 B → 退出循环节点(条件满足) → [完成] → 继续循环后的执行当退出循环执行时:
- 循环立即停止执行剩余迭代
- 当前迭代完成(退出循环之前的节点完成)
- 循环节点的"完成"输出被触发
- 跳过任何剩余迭代
输出处理:
- 保留已完成迭代的结果
- 循环输出数组包含退出前迭代的结果
- 示例:如果循环在 10 次迭代的第 3 次时退出,输出包含迭代 0、1、2 的结果
工作流示例
示例 1:简单提前退出
循环与迭代节点
策略:按指定次数循环
次数:10
→ [循环开始] → HTTP Request (检查状态)
→ 条件分支节点
条件:$('HTTP Request').status === "completed"
→ [True] → 退出循环
→ [False] → 继续处理
→ [完成] → Answer (循环提前退出)示例 2:搜索直到找到
Code Node (获取要搜索的项目)
→ 循环与迭代节点
策略:遍历一个数组
集合:$('Code').items
→ [循环开始] → Code Node (检查是否匹配)
→ 条件分支节点
条件:$('Code').isMatch === true
→ [True] → 退出循环
→ Answer (找到:${$loop.item.name})
→ [False] → 继续
→ [完成] → Answer (未找到项目)示例 3:基于错误的退出
循环与迭代节点
策略:按指定次数循环
次数:100
→ [循环开始] → HTTP Request (API 调用)
→ 条件分支节点
条件:$('HTTP Request').statusCode >= 500
→ [True] → Code Node (增加错误计数)
→ 条件分支节点
条件:$('Code').errorCount >= 5
→ [True] → 退出循环
→ [False] → 继续
→ [False] → 处理结果
→ [完成] → Answer (处理完成或因错误停止)示例 4:基于条件的终止
循环与迭代节点
策略:遍历一个数组
集合:$('前序节点').users
变量:
- variable: "processed_count"
value: 0
type: "number"
→ [循环开始] → Code Node (处理用户)
→ Code Node (增加计数器)
→ 条件分支节点
条件:$loop.vars.processed_count >= 50
→ [True] → 退出循环
→ [False] → 继续
→ [完成] → Answer (已处理 ${$('循环').length} 个用户)示例 5:与退出条件结合
循环与迭代节点
策略:遍历一个数组
集合:$('节点').items
退出条件:$loop.vars.totalValue > 1000
→ [循环开始] → Code Node (处理项目)
→ 条件分支节点
条件:$('Code').isInvalid === true
→ [True] → 退出循环(无效项目时退出)
→ [False] → 继续
→ [完成] → Answer (处理停止:${reason})最佳实践
1. 使用退出循环实现清晰的控制流
javascript
// 好 - 意图明确
条件分支节点
条件:found === true
→ [True] → 退出循环
→ [False] → 继续处理
// 不够清晰 - 使用复杂的退出条件
// (有时退出条件更好,但退出循环对于显式退出更清晰)2. 在关键操作后放置退出循环
javascript
// 好 - 在退出前完成关键操作
处理数据
→ 保存结果
→ 退出循环
// 不太理想 - 在保存前退出
处理数据
→ 退出循环
→ 保存结果(可能不会执行)3. 与条件分支节点结合使用
javascript
// 在退出循环前始终使用条件分支节点
条件分支节点
条件:shouldExit === true
→ [True] → 退出循环
→ [False] → 继续4. 记录退出条件
使用节点描述说明循环可能退出的原因:
yaml
nodeDescription: "找到目标项目或发生错误时退出循环"5. 处理退出后的结果
javascript
// 检查循环输出长度以判断是否提前退出
$('循环节点').length < expectedIterations // 循环提前退出对比:退出循环 vs 退出条件
退出循环节点
- 何时使用:显式退出点,循环体内的条件退出
- 优势:控制流清晰,易于理解,可以有条件
- 限制:必须在循环内,只能在执行时退出
退出条件
- 何时使用:基于循环状态的自动终止
- 优势:每次迭代评估,可以引用循环变量
- 限制:只在迭代开始时检查
建议:使用退出循环节点实现显式退出点,使用退出条件实现基于循环状态的自动终止。
FAQ
Q1: 可以在一个循环中使用多个退出循环节点吗?
A:可以,但只有第一个执行的会退出循环。其他的不会执行。
Q2: 同一迭代中退出循环之后的节点会怎样?
A:它们不会执行。退出循环在执行时会立即退出循环。
Q3: 可以在循环外使用退出循环节点吗?
A:不可以。退出循环节点只能在循环与迭代节点内使用。
Q4: 如何知道循环是否提前退出?
A:比较循环输出长度与预期迭代次数:
javascript
// 预期 10 次迭代,但只有 5 个结果
$('循环节点').length < 10 // 循环提前退出Q5: 退出循环可以在并行循环中使用吗?
A:可以,但行为可能不可预测。在并行模式下,多次迭代同时运行,因此退出时机取决于执行顺序。
Q6: 退出循环和退出条件有什么区别?
A:
- 退出循环:显式退出点,当循环体内条件满足时执行
- 退出条件:每次迭代开始时的自动检查,评估循环状态
Q7: 退出前完成的迭代会包含在输出中吗?
A:会。循环输出数组包含退出前完成的所有迭代的结果。