Циклы и пакетная обработка

В n8n нет «классического цикла» в том смысле, как в обычных языках программирования. Большинство узлов сами обрабатывают каждый входящий item, поэтому простой цикл сводится к: «отдай узлу N items — он выполнится N раз». Но в реальной жизни этого иногда не хватает.

Узел сам по себе — это уже цикл

Если на вход узлу HTTP Request пришло 50 items, он отправит 50 HTTP-запросов. Никаких отдельных «циклов» писать не нужно — это поведение по умолчанию.

То же самое касается записи в базу, отправки писем, обращений к API. Один узел = одно действие на каждый item.

Когда этого мало: Split In Batches

Если items много (например, 10 000), и каждый их них вызывает HTTP-запрос — за один проход вы:

  • упрётесь в rate limit внешнего API;
  • будете очень долго ждать;
  • рискуете получить ошибку из-за объёма.

Для таких случаев есть узел Split In Batches (в некоторых версиях называется Loop Over Items). Он берёт массив items и выдаёт их порциями заданного размера.

Типичная схема использования:

Источник → Split In Batches → действие → (возврат к Split In Batches)

Узел Split In Batches имеет два выхода: «следующий батч» и «готово». Поток подключается так, чтобы после обработки очередного батча управление возвращалось обратно в Split In Batches — он отдаст следующую порцию. Когда items закончатся, сценарий пойдёт по второму выходу.

В настройках указывается размер батча. Например, если поставить 10, n8n будет обрабатывать по 10 items за раз.

Пауза между батчами

Часто вместе со Split In Batches ставят узел задержки (Wait) — чтобы не заваливать внешний API запросами. Например:

Items → Split In Batches (по 5) → HTTP Request → Wait (1 сек) → возврат

Это даёт мягкую нагрузку: 5 запросов, секунда паузы, ещё 5 запросов и т.д.

Бесконечные / условные циклы

«Реального» бесконечного цикла в сценарии нет, и это намеренно — длинные циклы плохо ложатся на event-driven архитектуру n8n. Если вам нужно что-то вроде «опрашивать API каждую минуту, пока не появится новая запись», правильный путь — не цикл внутри сценария, а триггер по расписанию (Schedule Trigger), который запускает сценарий каждую минуту.

Параллельность

По умолчанию в большинстве узлов items обрабатываются последовательно: один за другим. Это даёт предсказуемое поведение, но снижает скорость на больших объёмах. У некоторых узлов есть опция параллельной обработки или ограничения по параллелизму. Если её нет — параллельность можно эмулировать, разнося обработку по нескольким батчам и использованию подсценариев.

Главное

  • Один узел = одно действие на каждый item. Это и есть «встроенный цикл».
  • Когда items много — используйте Split In Batches (или Loop Over Items) с подходящим размером порции.
  • Между батчами полезно ставить Wait, чтобы не превышать лимиты API.
  • Длительные периодические задачи — это не цикл, а Schedule Trigger.