N8N中文教程
使用 n8n/Key_concepts/Flow_logic

在 n8n 中使用循环#

当你需要处理多个项目或重复执行某个操作时,循环功能非常有用,例如向通讯录中的每个联系人发送消息。n8n 会自动处理这种重复性任务,这意味着你通常不需要在工作流中显式地构建循环结构。不过,某些节点 是例外情况。

在 n8n 中使用循环#

n8n 的节点可以接收任意数量的项目作为输入,对这些项目进行处理,并输出结果。你可以将每个项目理解为一个单独的数据点,或者看作是某个节点输出表格中的一行数据。

Customer Datastore 节点输出

节点通常会对每一个项目运行一次。例如,如果你想将 Customer Datastore 节点中的客户姓名和备注通过 Slack 发送为消息,你可以这样做:

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

你会收到五条消息:每条对应一个项目。 这样你就可以处理多个项目,而无需显式地将节点以循环方式连接。

仅执行一次节点#

在某些情况下,你可能不希望某个节点处理所有接收到的项目。例如,只想向第一个客户发送一条 Slack 消息。此时,你可以通过切换该节点 设置(Settings) 选项卡中的 执行一次(Execute Once) 参数来实现。当输入数据包含多个项目,但你只想处理第一个时,此设置非常有用。

创建循环#

n8n 通常会自动为所有传入项目进行迭代处理。但在某些场景下,你需要手动创建循环以遍历所有项目。请参考 节点例外情况 查看不会自动迭代所有输入项目的节点列表。

循环直到满足条件#

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

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

示例工作流的编辑器界面视图

循环直到所有项目被处理#

当你希望循环处理直到所有项目完成时,可以使用 Loop Over Items 节点。若要逐个处理每个项目,请将 批处理大小(Batch Size) 设置为 1

你也可以将数据分组为批次并逐批处理。这种方法在处理大量输入数据时有助于避免 API 速率限制,或当你需要处理特定一组返回结果时特别有用。

Loop Over Items 节点会在所有输入项目被划分为批次并传递给工作流中的下一个节点后停止执行,因此无需额外添加 IF 节点来终止循环。

节点例外情况#

以下是一些需要你在工作流中自行设计循环的节点和操作:

  • CrateDB 在执行 insertupdate 操作时只运行一次。
  • Code 节点处于 对所有项目仅运行一次(Run Once for All Items) 模式时:根据输入的代码片段一次性处理所有项目。
  • Execute Workflow 节点处于 对所有项目仅运行一次(Run Once for All Items) 模式时。
  • HTTP Request:你需要自行处理分页逻辑。如果 API 调用返回的是分页结果,则必须创建循环逐页获取数据。
  • Microsoft SQL 在执行 insertupdatedelete 操作时只运行一次。
  • MongoDB 在执行 insertupdate 操作时只运行一次。
  • QuestDB 在执行 insert 操作时只运行一次。
  • Redis:
    • Info(信息):此操作无论输入数据中有多少项目,都只会执行一次。
  • RSS Read 针对请求的 URL 只执行一次。
  • TimescaleDB 在执行 insertupdate 操作时只运行一次。