Stop(停止)
以声明的状态和消息结束运行。
用途
立即终止运行并声明它如何结束:success、failure 或 cancelled,附可选消息。
当流程被用作 Sub Flow 时,Stop 的状态就成为流程的返回值——父流程据此分支。
何时用
- 标记成功完成。
- 前提不满足时刻意结束。
- 给 Sub Flow 一个返回值。
- 终止任何不该继续的已接路径。
何时不用
前提
一个 final status。消息可选但强烈建议。
如何运行
运行时到达 Stop 节点时,以声明的状态与消息终止运行。不解析任何连线——Stop 是终止节点,没有输出端口。
Stop 计入 maxNodeExecutions,算作一个已执行节点。
设置
| 设置 | 类型 | 范围 | 备注 |
|---|---|---|---|
| Final status | 选择 | success、failure、cancelled | 必填 |
| Message | string | ≤ 500 字符 | 可选。出现在运行日志里 |
选状态
| 状态 | 含义 |
|---|---|
success | 流程做成了它要做的——包括"没什么可做" |
failure | 流程无法完成它的活 |
cancelled | 刻意结束,既非成功也非失败 |
一个检查每日奖励的流程发现已经领过了。那是成功,不是失败——期望的终态成立。
把 failure 留给"我干不了我的活",因为那才是你的告警和父流程要分支的东西。
消息就是你的日志
在每个 Stop 上设消息,失败的尤其如此。那串文字就是一次运行在夜里失败后你会读到的东西。
"All slots full" 告诉你发生了什么。一个节点 id 什么也不告诉你。
端口
Stop 是终止节点。它没有输出端口——没有东西从它接出。
基础示例
- Final status:success
- Message:
"Daily rewards collected"
实际示例——彼此分明的结局
给流程每个有意义的结果一个结局:
三者都是成功——流程在每种情况下都行为正确——但消息让你不用打开图就知道发生了哪种。
高级示例——Stop 作为 Sub Flow 的返回值
当一个流程被另一个调用时,它的 Stop 就是它的接口:
两个状态清晰的 Stop 给父流程恰好两个分支去处理。这正是子流程像函数一样工作的原因。
最佳实践
- 每个 Stop 都写消息。 失败的必须写。
- "没什么可做"用
success。 - 给子流程恰好是调用方需要的结局——通常一个成功、一个失败。
- 把每条死路接到 Stop。 空路由以
TRANSITION_NOT_FOUND结束,那比你的消息说的少得多。 - 让消息可操作——说流程当时处于什么状态,不只是它失败了。
- 不要害怕多个 Stop。 几个标注清楚的结局胜过一个共享结局加一个解释用的变量。
性能笔记
- Stop 零成本;它终止运行。
- 它消耗
maxNodeExecutions的一次执行。 - 早早到达 Stop 是最便宜的结果——一个位置好的守卫立刻停止,省下整个剩余流程。
内存笔记
- 终止会释放运行的执行上下文,包括
run作用域的 Runtime Memory。 persist、session、shared记忆存活;那是它们的用途。
常见错误
| 错误 | 后果 | 修复 |
|---|---|---|
| 失败 Stop 无消息 | 日志读不懂 | 写明原因 |
"没什么可做"用 failure | 假警报;父流程白走恢复路径 | 用 success |
| 试图从 Stop 接出 | 它是终止节点 | 用 Return 或重构 |
| 用 Stop 离开循环 | 结束整个运行 | 用 Break |
| 失败路由留空 | 运行以 TRANSITION_NOT_FOUND 结束 | 接到 Stop |
| 所有结果共用一个 Stop | 分不清发生了什么 | 每个有意义的结局一个 |
故障排查
运行以 TRANSITION_NOT_FOUND 而非我的 Stop 结束。
某个路由没接连线。找日志里最后的节点并查它的端口。
父流程在调用子流程后走了错分支。 子流程的 Stop 声明了错的状态。查它实际到达了哪个 Stop。
日志没显示原因。 到达的 Stop 上没设消息。
cancelled 的 Stop 看起来像用户取消。
那是声明的状态,不是真正的取消。少用——success 或 failure 通常更清楚。
FAQ
流程能有多个 Stop 吗? 能,而且通常应该有。
Stop 计入 maxNodeExecutions 吗?
计入。Start 也计入。
Stop 与 Return 的区别? 两者都以声明状态终止运行。Return 被设计成从任何地方(包括循环内)都能到达。
消息出现在哪? 运行日志里,以及运行的最终结果里。