Skip to content

退出循环节点

退出循环节点允许你在循环完成所有迭代之前提前退出。这在需要基于条件停止处理或找到所需结果时非常有用。

使用场景

典型应用

  • 提前退出 - 满足条件时停止循环
  • 搜索操作 - 找到目标项目时退出
  • 错误恢复 - 错误过多时退出
  • 条件终止 - 基于业务逻辑停止
  • 性能优化 - 提前退出以节省资源

重要限制

仅限循环作用域

退出循环节点只能在循环与迭代节点内使用。

  • 必须连接到循环开始输出端口
  • 不能在循环外使用
  • 只有循环内的节点可以连接到退出循环节点

节点配置

退出循环节点的配置非常简单 - 它只需在执行时退出循环。

端口和连接

输入端口

  • Input (端口 0)
    • 只能单连接 (allowMultiple: false)
    • 主输入触发器
    • 位置:左侧

输出端口

  • 错误输出
    • 处理执行期间的错误
    • 标准错误处理端口

注意:退出循环节点没有常规输出端口。执行时,它会立即退出循环,执行从循环节点的"完成"输出继续。

工作原理

  1. 执行流程

    循环与迭代节点
      → [循环开始] → 节点 A
                     → 节点 B
                     → 退出循环节点(条件满足)
      → [完成] → 继续循环后的执行
  2. 当退出循环执行时

    • 循环立即停止执行剩余迭代
    • 当前迭代完成(退出循环之前的节点完成)
    • 循环节点的"完成"输出被触发
    • 跳过任何剩余迭代
  3. 输出处理

    • 保留已完成迭代的结果
    • 循环输出数组包含退出前迭代的结果
    • 示例:如果循环在 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:会。循环输出数组包含退出前完成的所有迭代的结果。

下一步

相关资源