跳到主要内容

循环

当你需要处理多个数据项或重复执行某个操作时(例如向通讯录中的每位联系人发送消息),循环非常有用。n8n 会自动处理这种重复性操作,这意味着在大多数情况下,你无需在工作流中显式构建循环。但也存在少数例外节点。

在 n8n 中使用循环

n8n 节点接受任意数量的数据项作为输入,处理后输出结果。你可以将每个数据项理解为一个单独的数据点,或节点输出表中的一行数据。

Customer Datastore 节点输出

节点通常对每个数据项运行一次。例如,如果你想将客户数据存储节点(Customer Datastore)中每位客户的姓名和备注以消息形式发送到 Slack,你只需:

  1. 将 Slack 节点连接到 Customer Datastore 节点。
  2. 配置参数。
  3. 执行节点。

你将收到五条消息,每个数据项对应一条。

这就是 n8n 实现批量处理多个数据项的方式,无需显式地将节点连接成循环结构。

让节点只执行一次

创建循环

n8n 通常会自动遍历所有传入数据项,但在某些特定场景下,你需要手动创建循环来遍历所有数据项。具体哪些节点不会自动遍历所有传入数据项,请参阅「节点例外列表」。

循环直到满足条件

要在 n8n 工作流中创建循环,将一个节点的输出连接到前一个节点的输入。添加一个 IF 节点来判断何时停止循环。

这是一个使用 IF 节点实现循环的示例工作流

示例工作流的编辑器视图

循环直到所有数据项处理完毕

当你希望循环直到所有数据项都处理完毕时,使用 Loop Over Items 节点。要逐个处理每个数据项,将 批次大小(Batch Size) 设置为 1

你还可以将数据分批处理。当处理大量传入数据或需要处理特定批次的返回数据时,这种方式有助于避免触发 API 速率限制。

当所有传入数据项都被分批传递给工作流中的下一个节点后,Loop Over Items 节点会自动停止执行,因此无需额外添加 IF 节点来停止循环。

节点例外

以下节点和操作需要在工作流中手动设计循环:

  • CrateDB:insertupdate 操作只执行一次。
  • Code 节点(对所有数据项运行一次模式):根据输入的代码片段处理所有数据项。
  • Execute Workflow 节点(对所有数据项运行一次模式)。
  • HTTP Request:需自行处理分页逻辑。如果 API 调用返回分页结果,必须创建循环来逐页获取数据。
  • Microsoft SQL:insertupdatedelete 操作只执行一次。
  • MongoDB:insertupdate 操作只执行一次。
  • QuestDB:insert 操作只执行一次。
  • Redis:
    • Info(信息):无论传入数据包含多少项,此操作都只执行一次。
  • RSS Read:对所请求的 URL 只执行一次。
  • TimescaleDB:insertupdate 操作只执行一次。