循环
一共四个节点。它们都在一个专门的输出上发出循环体,并通过自己的 done 端口告知工作已经结束。
ForEach(遍历列表)
Section titled “ForEach(遍历列表)”在一个列表上迭代。
| 输入 | items(json) |
| 输出 | each —— 每个元素发出一次 |
| 配置 | parallelism:{ enabled, count } |
不启用并行时,各次迭代依次串行执行。启用后,最多有 count 次迭代同时进行(最小值为 2)。
done 端口只会在所有迭代子图都结束之后发出一次:汇总或清理工作就接在这里。
HTTP 请求 ──response[body.ids]──► ForEach(并行度 4) ├─ each ──► HTTP 请求“详情” └─ done ──► Log“已完成”For(数值循环)
Section titled “For(数值循环)”数值型循环。
| 输入 | from、to、step(数值) |
| 输出 | each —— 显示名为 index |
| 配置 | from、to、operator(默认 <,也可以是 ≤、=、≥、>、≠)、step(0 会按 1 处理)、parallelism |
While(条件循环)
Section titled “While(条件循环)”先判断条件再执行的循环。
| 输入 | left、right |
| 输出 | then —— 显示名为循环体,纯信号 |
| 配置 | operator、left、right |
循环体是一个信号:它不携带任何值。请把循环体的末端接回 While 节点的 in 端口,
以便重新求值条件。
可以用一个运行变量作为计数器或停止条件。
Do…While(后判断循环)
Section titled “Do…While(后判断循环)”与上一个相同,但循环体至少执行一次:判断发生在之后。输出的显示名是循环。
| 情形 | 节点 |
|---|---|
| 我手上有一个列表 | ForEach |
| 我知道迭代的次数 | For |
| 停止条件取决于某个结果,且要先判断 | While |
| 同上,但至少要跑一轮 | Do…While |
| 我想在失败时重试 | Retry |
ForEach 和 For 的并行会真的并发发出网络调用。在预发布环境上请逐步调高它 —— 并且别忘了用等待节点来平滑节奏。