首页 n8n教程 n8n Loop节点全解:数组遍历与API分批处理策略(附:列表逐条运行配置教学)

n8n Loop节点全解:数组遍历与API分批处理策略(附:列表逐条运行配置教学)

作者: Dr.n8n 更新时间:2025-12-18 09:00:41 分类:n8n教程

为什么你的批量API请求总失败?90%的人没搞懂Loop节点的“呼吸节奏”

上周帮一家跨境电商客户排查自动化流程时,他们哭诉:“明明商品数据都传进来了,为什么订单同步只处理了第一条?”——这正是无数n8n新手踩坑的典型场景:拿到一个包含50个SKU的数组,却指望一个HTTP请求节点能“一口吞下”。结果不是超时就是被API限流踢飞。今天我就用“快递分拣中心”的比喻,带你彻底吃透Loop节点的底层逻辑与实战配置。

Loop不是“循环”,而是“拆包流水线”

很多用户误以为Loop节点是编程里的for循环,其实它更像快递仓库的自动分拣机:当一整车(数组)包裹 arrives,分拣机会把每个包裹(数组元素)单独放到传送带(单次执行上下文)上,贴标、扫描、装车——每件独立处理,互不干扰。我在为某SaaS客户搭建客户标签系统时,就靠这个机制把5000个用户ID拆成单条请求,完美避开CRM系统的QPS限制。

💡 核心认知:Loop节点不生产数据,它只是数据的“拆包工”。输入必须是数组(Array),输出是数组里每一个Object的独立执行流。

三步配置教学:从“数组爆炸”到“优雅逐条运行”

  1. 前置准备:确保上游节点(如Webhook或Function)输出的是标准JSON数组。常见错误是输出了字符串——用Set节点配合JSON.parse()先做格式转换。
  2. 拖入Loop节点:在画布中添加Loop节点后,关键设置藏在“Parameters”面板的Input Data Field里。这里要填的是数组路径,比如你上游输出{ products: [...] },这里就填products
  3. 下游衔接:Loop之后接的节点(如HTTP Request),其参数要用{{$json.item}}{{$json["item"]}}来引用当前元素——别再傻傻写{{$json.products}}了!
// 示例:上游Function节点生成测试数组
return [
  { json: { items: [
    { id: 1, name: "iPhone" },
    { id: 2, name: "MacBook" }
  ] } }
];

高级策略:用Delay节点给API“人工呼吸”

当你对接微信/钉钉等第三方API时,即便拆成单条请求,也可能因触发频率过高被拉黑。此时要在Loop内嵌套Delay节点——就像给分拣机加个缓冲区,每处理完一件包裹强制休息2秒。具体操作:在Loop节点后的HTTP请求前插入Delay,选择“Wait for X seconds”并设置合理间隔(建议≥1.5秒)。

场景推荐延迟替代方案
企业微信API2秒用Queue模式+外部Redis
自建数据库写入0.5秒批量INSERT语句

避坑指南:三个高频报错的急救方案

  • 报错“Cannot read property 'length' of undefined”:检查上游是否真输出了数组。用Debug节点打印$input.all()确认结构。
  • 下游节点收不到数据:99%是因为在HTTP节点里写了{{$json.items.name}}——正确写法是{{$json.item.name}}(注意item是单数!)
  • 流程卡死无响应:可能是Delay时间设太长。临时解决方案:在Loop外层加个Error Trigger节点捕获超时异常。

终极心法:Loop + Function = 无限可能

当你需要对数组元素做预处理(比如过滤无效数据或添加计算字段),就在Loop前插入Function节点。我曾用此组合实现“动态跳过库存为0的商品”:return items.filter(item => item.stock > 0).map(...)。记住:Loop负责拆解,Function负责改造,两者结合才是王道。

现在轮到你了——你在用Loop节点时遇到过哪些奇葩报错?或者有什么骚操作想分享?评论区留下你的故事,点赞最高的三位我会送出自定义n8n工作流诊断服务!