当前位置: 首页 > news >正文

n8n循环处理完全指南

一、使用Split In Batches节点实现可视化循环

适用场景:批量处理大量数据(如100条新闻分10批处理)

  1. 添加Split In Batches节点

  2. 配置节点参数:
  • 批量大小(Batch Size):10
  • 输入数据:{{ $json.items }}
  1. 在循环体中处理单条数据

  2. 使用"循环完成"连接后续节点

示例配置

// 输入数据表达式

{{ $node["RSS获取"].json["items"] }}

// 循环体内访问当前项

{{ $json.title }}

{{ $json.summary }}

二、在Code节点中使用JavaScript循环

1. forEach循环处理关键词数组

// ... existing code ...

// 处理关键词并添加分类标签

let categorizedKeywords = [];

$json.keywords.forEach(keyword => {

  // 定义关键词分类映射

  const categories = {

    "技术趋势": ["GPT-4", "大模型", "生成式AI"],

    "核心技术": ["深度学习", "神经网络", "自然语言处理"],

    "头部企业": ["OpenAI", "谷歌", "百度", "微软"]

  };

  

  // 查找关键词所属分类

  let category = "其他";

  for(const [cat, keywords] of Object.entries(categories)) 

  {

    if(keywords.includes(keyword)) {

      category = cat;

      break;

    }

  }

  

  categorizedKeywords.push({

    name: keyword,

    category: category

  });

});

return {

  title: $json.title,

  pubDate: $json.pubDate,

  summary: $json.summary,

  keywords: categorizedKeywords,

  rating: $json.rating,

  link: $json.link

};

// ... existing code ...

2. map方法处理数组生成HTML列表

// 将新闻列表转换为HTML列表

{{ $json.items.map(item => `

  <div class="news-item">

    <h3>${item.title}</h3>

    <p>${item.summary.substring(0, 100)}...</p>

    <div class="meta">${item.pubDate}</div>

  </div>

`).join('') }}

如果是多条输入一起处理的模式,请使用下面代码:

{{ $input.all().map(item => `
<h1>${item.json.output.title}</h1>
<div class="news-item">
<h3 class="title">${item.json.output.title}</h3>
<div >
${item.json.output.pubDate}
<span class="rating">${item.json.output.rating}</span>
</div>
<p class="summary">${item.json.output.summary}</p>
<p><span class="keywords">关键词:</span> ${item.json.output.keywords.join(', ')}</p>
<p><a href="${item.json.output.link}" class="link" target="_blank">请阅读原文</a></p>
</div>
`)}}

3. for循环实现嵌套数据处理

// 处理包含嵌套结构的新闻数据

let result = [];

for(let i = 0; i < $json.news.length; i++) {

  const news = $json.news[i];

  

  // 处理嵌套的相关文章

  let relatedArticles = [];

  if(news.related && news.related.length > 0) {

    for(let j = 0; j < news.related.length; j++) {

      relatedArticles.push({

        id: news.related[j].id,

        title: news.related[j].title,

        // 只保留必要字段

      });

    }

  }

  

  result.push({

    title: news.title,

    pubDate: news.pubDate,

    relatedCount: relatedArticles.length,

    related: relatedArticles

  });

}

return { processedNews: result };

三、使用Loop节点实现条件循环

适用场景:需要满足特定条件才停止的循环(如重试API直到成功)

  1. 添加Loop节点并设置循环条件:

    {{ $node["API请求"].json["status"] !== "success" && 

    $json.retries < 3 }}

  2. 循环体内配置:

    • API请求节点

    • 错误处理节点

    • 重试计数更新:{{ $json.retries + 1 }}

  3. 循环完成后连接后续节点

四、实战案例:批量处理新闻数据

需求:将多条新闻按关键词分类并统计数量

// 在Code节点中处理多条新闻数据

const newsItems = $node["RSS获取"].json["items"];

const categoryStats = {

  "技术趋势": 0,

  "核心技术": 0,

  "头部企业": 0,

  "应用场景": 0,

  "其他": 0

};

// 定义关键词分类

const keywordCategories = {

  "技术趋势": ["GPT-4", "大模型", "生成式AI", "AGI", "AIGC"],

  "核心技术": ["深度学习", "神经网络", "自然语言处理", "计算机视

  觉"],

  "头部企业": ["OpenAI", "谷歌", "百度", "微软", "阿里", "腾讯

  "],

  "应用场景": ["医疗", "教育", "金融", "自动驾驶", "智能制造"]

};

// 遍历所有新闻

newsItems.forEach(news => {

  let newsCategory = "其他";

  

  // 遍历新闻关键词

  news.keywords.forEach(keyword => {

    // 匹配分类

    for(const [category, keywords] of Object.entries

    (keywordCategories)) {

      if(keywords.includes(keyword)) {

        newsCategory = category;

        categoryStats[category]++;

        return; // 找到分类后跳出循环

      }

    }

  });

  

  // 为新闻添加分类

  news.category = newsCategory;

});

return {

  totalNews: newsItems.length,

  categoryStats: categoryStats,

  processedNews: newsItems

};

五、循环处理常见问题解决

1. 避免无限循环

// 添加最大循环次数保护

const maxIterations = 100;

let count = 0;

let result = [];

let currentItem = $json.firstItem;

while(currentItem && count < maxIterations) {

  result.push(currentItem);

  currentItem = currentItem.nextItem;

  count++;

}

return { items: result, iterations: count };

2. 循环中的异步处理

// 使用Promise.all处理异步操作

async function processItems(items) {

  const promises = items.map(async (item) => {

    // 异步API调用

    const response = await fetch('https://api.example.com/

    process', {

      method: 'POST',

      body: JSON.stringify(item)

    });

    return response.json();

  });

  

  return Promise.all(promises);

}

// 执行并返回结果

const processed = await processItems($json.items);

return { processedItems: processed };

六、循环性能优化技巧

  1. 批量处理:使用Split In Batches节点控制每次处理数量

  2. 提前退出:在循环中使用break或return减少不必要迭代

  3. 避免嵌套循环:尽可能使用数组方法替代多层for循环

  4. 使用索引缓存:对频繁访问的大型数组建立索引

  5. 并行处理:在Code节点中使用Promise.all提高处理速度

这些循环处理方法可以根据实际需求灵活组合使用,建议优先尝试可视化节点(如Split In Batches),复杂场景再使用Code节点编写自定义循环逻辑。

七、使用模式的分别

⚠️注意⚠️:

以下代码语法适用于模式,即输入对象为:$json或$input.item.json

Run Once for Each: ltemRun this code as many times as there are input items

如果是下面模式,输入对象为:$input.all()

Run Once for All ltems
Run this code only once, no matter how many input items there are

http://www.dtcms.com/a/318327.html

相关文章:

  • 工业自动化中Modbus RTU转Profibus DP网关的应用与温度监控实现
  • 昇思+昇腾开发板:DeepSeek-R1-Distill-Qwen-1.5B 模型推理部署与 JIT 优化实践
  • spring i18n 词条英文下格式化占位符不生效 问题排查处理
  • Kafka 重平衡(Rebalance)机制
  • UniStorm 5.3.0 + Unity2022 + URP配置说明
  • 机器学习概述
  • 微调训练时,ignore_empty_think是怎么保护模型的思考能力?
  • 自然语言处理的相关概念与问题
  • Redis面试精讲 Day 12:Redis Sentinel哨兵机制详解
  • 非机动车识别mAP↑28%!陌讯多模态融合算法在智慧交通的实战解析
  • PyTorch生成式人工智能——Hugging Face环境配置与应用详解
  • leetcode 3479. 水果成篮 III 中等
  • 74.5%登顶SWE-bench:Claude Opus 4.1如何重塑AI编程格局
  • AdGuard 安卓修改版:全方位广告拦截与隐私保护专家
  • 将英文PDF文件完整地翻译成中文的4类方式
  • 【机器学习篇】02day.python机器学习篇Scikit-learn基础操作
  • Kafka ISR机制和Raft区别:副本数优化的秘密
  • 浅谈对linux进程池的理解
  • 解决远程连接云服务器mysql编号1130问题
  • Vue Router 路由的创建和基本使用(超详细)
  • 《算法导论》第 7 章 - 快速排序
  • 服务器工作职责及核心组件详解
  • P1629 邮递员送信
  • 【RabbitMQ】高级特性—发送方确认详解
  • 【科研绘图系列】R语言绘制瀑布图
  • 院校机试刷题第二十一天|回顾代码随想录第十六天、
  • google官方性能文档:Android 动态性能框架优化散热和 CPU 性能-Thermal API部分
  • 短剧小程序系统开发:技术驱动下的内容创新之路
  • 2025年08月 GitHub 热门项目推荐
  • 1深度学习Pytorch-pytorch、tensor的创建、属性、设备和类型转换、数据转换、常见操作(获取元素、元素运算、形状改变、相乘、广播)