Циклы и пакетная обработка
В 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.