Все ноды/Logic & Flow/Iteration

Для каждого

Последовательно обходит массив со входа «Массив». Для каждого элемента запускает тело между выходом «Элемент» и входом «Конец прохода». Значение, пришедшее на «Конец прохода», не читается — нода удобна для действий, а не для сборки нового массива (для сборки есть Map).

Для каждого▶▦
МассивГотово · число проходов
Конец проходаЭлемент

Тип в графе: for_each

ExecSubgraph

Можно включить выход ошибки и обработать сбой отдельным путём.

Порты можно разделить на исполнение и данные (split ports).

Как попробовать

Обход массива с индексом

Шаблон достаёт массив из входа, цикл проходит его по одному элементу и пишет каждый в лог.

Вход
Шаблон▶
Для каждого▶▦
Лог▶
Выход▶
  • Исполнение + данные
Нажмите «Скопировать ноды», откройте редактор и нажмите Ctrl+V на холсте.

Запускается сразу

Как применять

Берите эту ноду, когда над каждым элементом массива надо что-то сделать, а собирать результат не нужно: разослать письма по списку адресов, записать строки в коллекцию, отправить сообщения в мессенджер. Если из каждого элемента нужно получить новое значение — это map; если из массива надо отобрать часть элементов — filter; если повторов заранее неизвестное число и они зависят от условия — while_loop. Когда тело — это одно преобразование без обращений к сервисам, дешевле обойтись одной нодой code_javascript: цикл в графе стоит отдельной записи в журнале на каждую итерацию.

Как это работает

У ноды четыре порта. На input («Массив») приходит массив и одновременно команда запуска. Порт item («Элемент») — начало тела цикла, порт end («Конец прохода») — его конец; телом считаются все ноды, лежащие на путях от item к end. Порт completed («Готово») срабатывает один раз, когда обход закончен.

Массивом считается JSON-массив или строка, которая его кодирует. Элементы обходятся строго по одному, по порядку. Без флага «Включить индекс» на item уходит сам элемент, и первая нода тела читает его как {{ inputs.input }}. С флагом уходит объект {<ключ элемента>: значение, index: N} — тогда это {{ inputs.input.item }} и {{ inputs.input.index }}, где имя ключа задаёт поле «Ключ элемента».

Значение, пришедшее на end, нода игнорирует — важен сам факт прохода. Результат ноды — число обработанных элементов: {{ nodes.<id>.output }}. В деталях запуска итерации видны отдельными группами «Итерация 1», «Итерация 2» и так далее.

Частые ошибки

  • На вход подан объект, а не массив. Из entry обычно приходит объект вида {"items": [...]}, и нода падает с «expected a list». Поставьте перед циклом template с {{ inputs.input.items | tojson }} — валидатор предупреждает об этой связи заранее.
  • Тело не замкнуто. Ребро из item и ребро в end обязательны оба, даже если значение на end не нужно: без любого из них сценарии не задеплоится.
  • Цикл внутри цикла. Вложенные циклы отвергаются валидатором. Ставьте их последовательно (Готово первого → input второго) или переносите внутренний обход в code_javascript.
  • Ребро из тела «наружу». Всё, что продолжается от нод тела, считается частью тела и выполняется на каждой итерации. Продолжайте граф от порта completed.
  • Чтение результата тела снаружи. {{ nodes.<нода тела>.output }} за пределами цикла хранит значение последней итерации, а не всех сразу.
  • Ошибка одной итерации останавливает весь цикл. Оставшиеся элементы не обрабатываются. Если сбои ожидаемы, обработайте их внутри тела — веткой ошибки у самой рискованной ноды.

Входы

ПортПроводДанныеПримечания
МассивinputИсполнение + данныеexecute_data—

Запускает шаг и приносит список: массив JSON или строку с массивом.

Конец проходаendИсполнение + данныеexecute_data—

Отмечает конец одного прохода тела. Пришедшее значение не читается.

Выходы

ПортПроводДанныеПримечания
Готово · число проходовcompletedИсполнение + данныеexecute_data—
ЭлементitemИсполнение + данныеexecute_data—

Настройки

ПолеТипПо умолчаниюОписание
Включить индексinclude_indexbooleanfalse

Когда включено, каждая итерация передаёт словарь {item_key: element, index: n} на порт item. Когда выключено, порт item несёт само значение элемента массива (без обёртки-словаря).

Ключ элементаitem_variablestringitem

Ключ для текущего элемента в словаре payload (вместе с индексом) на порту item.

показывается при «Включить индекс» = да

Общие поля

Эти три поля есть у каждой ноды: платформа добавляет их сама, а не автор ноды.

  • expose_error_output — Если включено, показывает выход выполнения для подключения нод, которые запускаются при сбое этой ноды.
  • split_ports_in — Показывать отдельные порты входа для выполнения и данных вместо одного объединённого.
  • split_ports_out — Показывать отдельные порты выхода для выполнения и данных вместо одного объединённого.