Все ноды/Logic & Flow/Iteration
Маппинг
Обходит JSON-массив с ED-порта «Input». Для каждого элемента запускает подграф item→end и собирает сырое значение с порта end в выходной массив (порядок совпадает с входным массивом). Результат ноды — сам этот массив. Опционально — параллельное выполнение с ограничением конкурентности.
Тип в графе: map
ExecSubgraph
Можно включить ветку ошибки (expose_error_output) и обработать сбой отдельным путём.
Порты можно разделить на исполнение и данные (split ports).
Как попробовать
Преобразование каждого элемента
Тело возвращает новое значение для элемента, нода собирает значения в массив того же порядка.
- Исполнение + данные
Запускается сразу
Как применять
Берите эту ноду, когда из каждого элемента массива нужно получить новое значение и собрать их вместе: пересказать моделью каждый отзыв, вытащить поле из каждой строки ответа API, привести список к другому формату. Если результат не нужен, а нужны побочные действия — это for_each; если элементы надо не менять, а отбирать — filter. Преобразование, которое выражается одним выражением, дешевле сделать шаблоном template с фильтрами Jinja или нодой code_javascript — цикл в графе имеет смысл, когда внутри вызов модели, запрос к сервису или ветвление.
Как это работает
На input (Array) приходит массив и команда запуска. Порт item (Start) начинает тело,
порт end (End) его замыкает; телом считаются все ноды на путях от item к end. Значение,
оказавшееся на end, попадает в выходной массив — по одному на элемент, в исходном порядке.
Результат ноды — сам массив: {{ nodes.<id>.output }}. Порт completed (Done) срабатывает
один раз, когда собраны все элементы.
Без флага «Включить индекс» элемент уходит на item как есть и читается в теле как
{{ inputs.input }}. С флагом приходит объект {<ключ элемента>: значение, index: N}, то
есть {{ inputs.input.item }} и {{ inputs.input.index }}.
Галочка «Параллельное выполнение» ставит итерации в работу одновременно, но тело каждой итерации выполняется под общей блокировкой — внутренние ноды всегда видят согласованные данные. Порядок результатов совпадает с порядком входа независимо от режима.
Частые ошибки
- На вход подан объект, а не массив. Из
entryобычно приходит объект; поставьте перед цикломtemplateс{{ inputs.input.items | tojson }}. Валидатор предупреждает об этой связи заранее. - Ожидание кратного ускорения от параллельного режима. Тела итераций не выполняются одновременно, так что цикл из десяти вызовов модели быстрее в десять раз не станет.
- Тело не замкнуто. Ребро из
itemи ребро вendобязательны; без любого из них воркфлоу не задеплоится. - Цикл внутри цикла. Вложенные циклы отвергаются валидатором: ставьте их последовательно
(
Doneпервого →inputвторого) или переносите внутренний обход вcode_javascript. - Ребро из тела «наружу». Продолжение от нод тела считается частью тела и выполняется на
каждой итерации. Дальнейший граф стройте от порта
completed. - Чтение элементов через
nodes.{{ nodes.<нода тела>.output }}за пределами цикла хранит только последнюю итерацию. Весь результат — на выходе самой нодыmap. - Ошибка одной итерации останавливает весь цикл, и собранный массив не возвращается. Если сбои ожидаемы, обработайте их внутри тела веткой ошибки.
Входы
| Порт | Провод | Данные | Примечания |
|---|---|---|---|
Arrayinput | Исполнение + данныеexecute_data | — | Run trigger and array payload (JSON array or string encoding an array). |
Itemend | Исполнение + данныеexecute_data | — | End of subgraph for one item; return value from inner graph. |
Выходы
| Порт | Провод | Данные | Примечания |
|---|---|---|---|
Resultcompleted | Исполнение + данныеexecute_data | — | |
Itemitem | Исполнение + данныеexecute_data | — |
Настройки
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
Включить индексinclude_index | boolean | false | Если включено, каждая итерация передаёт на порт item словарь {item_key: element, index: n}. Если выключено, порт item несёт значение элемента массива напрямую (без обёртки-словаря). |
Ключ элементаitem_variable | string | item | Ключ для текущего элемента в словаре payload (с индексом) на порту item. показывается при include_index = true |
Макс. конкурентностьmax_concurrency | integer | 10 | Максимальное число параллельных запусков подграфа, когда включено параллельное выполнение. |
Параллельное выполнениеparallel_execution | boolean | false | Запускать итерации подграфа параллельно; каждый запуск всё равно держит глобальный лок, поэтому внутренние ноды видят согласованный payload (только map/filter). |
Общие поля
Эти три поля есть у каждой ноды: платформа добавляет их сама, а не автор ноды.
expose_error_output— Если включено, показывает выход выполнения для подключения нод, которые запускаются при сбое этого шага.split_ports_in— Показывать отдельные порты входа для выполнения и данных вместо одного объединённого.split_ports_out— Показывать отдельные порты выхода для выполнения и данных вместо одного объединённого.