【n8n教程】Loop Over Items节点,循环处理大数据量

在n8n中,处理大量数据时经常会遇到API速率限制内存溢出请求超时等问题。而Loop Over Items (Split in Batches) 节点就是解决这些问题的"魔法武器"!


🎯 什么是Split in Batches节点?

核心概念

Split in Batches(循环处理)节点的作用非常简单:

将输入的大量数据分成若干个小批次,逐个处理每个批次,处理完所有批次后再将结果合并。

为什么要使用它?

想象你有100个客户的邮箱地址,需要逐一发送邮件。如果一次性发送100封邮件,可能会:

而使用Split in Batches节点,将100个邮箱分成10个批次(每批10个),每批之间暂停5分钟,就可以完美解决这个问题!✅


🔄 Split in Batches工作流程

让我们看看这个节点内部是如何工作的:


    
    
    
  输入数据(100项)
        ↓
   设置批次大小为10
        ↓
   第1次循环:处理第1-10项 → 输出到"loop"端口
        ↓
   等待5分钟
        ↓
   第2次循环:处理第11-20项 → 输出到"loop"端口
        ↓
   ... 继续循环 ...
        ↓
   所有批次处理完成
        ↓
   通过"done"端口输出合并后的所有结果

节点的三个关键输出端口

端口说明使用场景
loop返回当前批次的数据在循环内部处理每个批次
done所有批次处理完成后输出合并结果最后进行汇总或保存
reject(可选)错误输出处理失败情况

🛠️ 核心参数详解

1. 批次大小(Batch Size)

这是最重要的参数!它决定了每次循环要处理多少项

批次大小适用场景优缺点
1需要逐项处理、需要更细粒度控制✅ 控制力强 ❌ 循环次数多
5-10处理中等数据量、避免速率限制✅ 平衡方案
100+对速率没有限制的场景✅ 效率高 ❌ 容易超限

💡 建议:如果不确定,先从批次大小=1开始测试,根据实际情况调整。

2. Reset选项

这个选项用于控制节点如何处理分页循环条件


📊 实战案例:处理RSS源列表

现在让我们通过一个完整的实际案例来理解Split in Batches的使用。

场景描述

你想从3个不同的RSS源读取内容,但需要:

工作流结构


    
    
    
  Manual Trigger
    ↓
Define RSS Feeds (定义3个源)
    ↓
Split in Batches (批次大小=1)
    ↓
Read RSS Feed (读取当前源)
    ↓
Wait 15 Minutes (等待15分钟)
    ↓
Loop Back to Split in Batches
    ↓
Log Output (最后输出结果)

完整工作流JSON代码

将以下代码复制到n8n中(Ctrl+I 或菜单 → Import from URL/Clipboard):


    
    
    
  {
  "name"
: "RSS Feed Batch Processing with Delays",
  "nodes"
: [
    {

      "parameters"
: {},
      "name"
: "Manual Trigger",
      "type"
: "n8n-nodes-base.manualTrigger",
      "typeVersion"
: 1,
      "position"
: [100, 300]
    }
,
    {

      "parameters"
: {
        "functionCode"
: "return [\n  { json: { url: 'https://medium.com/feed/n8n-io' } },\n  { json: { url: 'https://dev.to/feed/n8n' } },\n  { json: { url: 'https://news.ycombinator.com/rss' } }\n];"
      }
,
      "name"
: "Define RSS Feeds",
      "type"
: "n8n-nodes-base.function",
      "typeVersion"
: 1,
      "position"
: [300, 300]
    }
,
    {

      "parameters"
: {
        "batchSize"
: 1
      }
,
      "name"
: "Split in Batches",
      "type"
: "n8n-nodes-base.splitInBatches",
      "typeVersion"
: 1,
      "position"
: [500, 300]
    }
,
    {

      "parameters"
: {
        "url"
: "={{ $json.url }}"
      }
,
      "name"
: "Read RSS Feed",
      "type"
: "n8n-nodes-base.rss",
      "typeVersion"
: 1,
      "position"
: [700, 300]
    }
,
    {

      "parameters"
: {
        "wait"
: 15,
        "unit"
: "minutes"
      }
,
      "name"
: "Wait 15 Minutes",
      "type"
: "n8n-nodes-base.wait",
      "typeVersion"
: 1,
      "position"
: [900, 300]
    }
,
    {

      "parameters"
: {
        "options"
: {}
      }
,
      "name"
: "Log Output",
      "type"
: "n8n-nodes-base.noOp",
      "typeVersion"
: 1,
      "position"
: [1100, 300]
    }

  ]
,
  "connections"
: {
    "Manual Trigger"
: {
      "main"
: [
        [
{"node": "Define RSS Feeds", "type": "main", "index": 0}]
      ]

    }
,
    "Define RSS Feeds"
: {
      "main"
: [
        [
{"node": "Split in Batches", "type": "main", "index": 0}]
      ]

    }
,
    "Split in Batches"
: {
      "main"
: [
        [
{"node": "Read RSS Feed", "type": "main", "index": 0}]
      ]

    }
,
    "Read RSS Feed"
: {
      "main"
: [
        [
{"node": "Wait 15 Minutes", "type": "main", "index": 0}]
      ]

    }
,
    "Wait 15 Minutes"
: {
      "main"
: [
        [
{"node": "Split in Batches", "type": "main", "index": 0}]
      ]

    }
,
    "Log Output"
: {
      "main"
: [[]]
    }

  }

}

逐步设置说明

第1步:Manual Trigger

点击添加触发器,选择Manual Trigger(手动触发)。这个节点用来开始工作流。

第2步:Define RSS Feeds(定义RSS源)

添加Function节点,复制以下代码:


    
    
    
  return [
  { json: { url: 'https://medium.com/feed/n8n-io' } },
  { json: { url: 'https://dev.to/feed/n8n' } },
  { json: { url: 'https://news.ycombinator.com/rss' } }
];

这会创建一个包含3个RSS源URL的数组。你可以根据需要修改URL。

第3步:Split in Batches

添加Split in Batches节点,设置:

这样每个RSS源会单独处理一次。

第4步:Read RSS Feed(读取RSS内容)

添加RSS Read节点,配置:

这个表达式从Split in Batches节点获取当前批次的URL。

第5步:Wait(等待延迟)

添加Wait节点,设置:

这会在每次读取RSS后暂停15分钟,避免频繁请求。

第6步:创建循环

关键步骤!将Wait节点的输出连接回Split in Batches节点(不是下一个节点),这样就形成了一个循环。当所有批次处理完成后,数据会自动流向"done"端口。

第7步:测试执行

点击Execute Workflow按钮测试工作流。你会看到:


💡 常用技巧和表达式

1. 检查所有项是否已处理

If节点中使用此表达式来检查循环是否完成:


    
    
    
  {{$node["Split in Batches"].context["noItemsLeft"]}}

如果返回true,表示所有项已处理完成。

2. 获取当前循环的索引

如果想知道这是第几次循环,使用:


    
    
    
  {{$node["Split in Batches"].context["currentRunIndex"]}}

示例:第1次循环返回1,第2次返回2,依此类推。

3. 条件循环(处理分页)

使用If节点和Reset选项实现分页循环:


    
    
    
  // If节点条件:检查是否还有下一页
{{$json.hasNextPage === true}}

✅ 最佳实践

Do's(应该做)

设定合理的批次大小 - 根据API限制调整(通常10-50)

添加Wait节点 - 在循环中加入延迟以避免速率限制

使用表达式动态引用数据 - 如 {{ $json.fieldName }}

测试小数据集 - 先用几个项测试,确保逻辑正确后再用大数据集

记录日志 - 添加Debug节点追踪各阶段的数据

Don'ts(不应该做)

设置过大的批次大小 - 容易触发API限制导致请求失败

忘记返回循环连接 - 必须将处理节点的输出连接回Split in Batches

无限循环 - 确保有明确的循环退出条件(特别是在分页场景)

忽略错误处理 - 添加Try-CatchError Output来处理失败情况


🎓 进阶应用场景

场景1:发送批量邮件


    
    
    
  Manual Trigger → 获取邮件列表 → Split in Batches(5) 
→ 发送邮件 → 等待2分钟 → 循环回Split in Batches

效果:每次发送5封邮件,间隔2分钟,避免被标记为垃圾邮件。

场景2:更新数据库记录


    
    
    
  Database Query → Split in Batches(20) 
→ 调用更新API → 等待30秒 → 循环回Split in Batches

效果:每次更新20条记录,避免数据库连接超时。

场景3:处理文件列表


    
    
    
  获取文件列表 → Split in Batches(1) 
→ 处理文件(转换/上传) → 等待 → 循环

效果:逐个处理文件,可用于大文件处理场景。


🐛 常见问题排查

问题1:工作流执行后只处理了第一批

原因:忘记将处理节点连接回Split in Batches

解决:确保从处理节点(如Wait、HTTP Request等)的输出连接回Split in Batches节点的输入

问题2:循环陷入无限循环

原因:没有明确的退出条件,或Reset选项设置错误

解决

问题3:数据在循环中丢失

原因:没有正确使用"done"输出端口

解决:在最后的节点中使用Split in Batches的**"done"输出**,而不是"loop"输出


📚 总结

你现在已经学会了:

✅ Split in Batches节点的工作原理

✅ 如何设置和配置批次大小

✅ 如何构建和调试循环工作流

✅ 实际应用场景和最佳实践

✅ 常见问题的解决方案

下一步建议:

  1. 1. 在自己的n8n实例中创建这个RSS源处理工作流
  2. 2. 尝试修改批次大小和等待时间,观察效果
  3. 3. 将其应用到你自己的业务场景(发送邮件、更新数据库等)
  4. 4. 探索与其他节点的组合(If、Merge、Set等)

官方文档[1]
n8n系列教程[2]

引用链接

[1] 官方文档: https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.splitinbatches/
[2] n8n系列教程: https://www.undsky.com/blog/?category=n8n%E6%95%99%E7%A8%8B#