Все ноды/Logic & Flow/Iteration
Map
Обходит массив со входа «Массив». Для каждого элемента запускает тело и собирает значение со входа «Значение элемента» в новый массив того же порядка. Можно выполнять элементы параллельно — с ограничением одновременных запусков.
Тип в графе: map
ExecSubgraph
Можно включить выход ошибки и обработать сбой отдельным путём.
Порты можно разделить на исполнение и данные (split ports).
Как попробовать
Преобразование каждого элемента
Тело возвращает новое значение для элемента, нода собирает значения в массив того же порядка.
- Исполнение + данные
Запускается сразу
Как применять
Берите эту ноду, когда из каждого элемента массива нужно получить новое значение и собрать их вместе: пересказать моделью каждый отзыв, вытащить поле из каждой строки ответа API, привести список к другому формату. Если результат не нужен, а нужны побочные действия — это for_each; если элементы надо не менять, а отбирать — filter. Преобразование, которое выражается одним выражением, дешевле сделать шаблоном template с фильтрами шаблона или нодой code_javascript — цикл в графе имеет смысл, когда внутри вызов модели, запрос к сервису или ветвление.
Как это работает
На input («Массив») приходит массив и команда запуска. Порт item («Элемент») начинает тело,
порт end («Значение элемента») его замыкает; телом считаются все ноды на путях от item к end. Значение,
оказавшееся на end, попадает в выходной массив — по одному на элемент, в исходном порядке.
Результат ноды — сам массив: {{ nodes.<id>.output }}. Порт completed («Готово») срабатывает
один раз, когда собраны все элементы.
Без флага «Включить индекс» элемент уходит на item как есть и читается в теле как
{{ inputs.input }}. С флагом приходит объект {<ключ элемента>: значение, index: N}, то
есть {{ inputs.input.item }} и {{ inputs.input.index }}.
Галочка «Параллельное выполнение» ставит итерации в работу одновременно, но тело каждой итерации выполняется под общей блокировкой — внутренние ноды всегда видят согласованные данные. Порядок результатов совпадает с порядком входа независимо от режима.
Частые ошибки
- На вход подан объект, а не массив. Из
entryобычно приходит объект; поставьте перед цикломtemplateс{{ inputs.input.items | tojson }}. Валидатор предупреждает об этой связи заранее. - Ожидание кратного ускорения от параллельного режима. Тела итераций не выполняются одновременно, так что цикл из десяти вызовов модели быстрее в десять раз не станет.
- Тело не замкнуто. Ребро из
itemи ребро вendобязательны; без любого из них сценарии не задеплоится. - Цикл внутри цикла. Вложенные циклы отвергаются валидатором: ставьте их последовательно
(
Готовопервого →inputвторого) или переносите внутренний обход вcode_javascript. - Ребро из тела «наружу». Продолжение от нод тела считается частью тела и выполняется на
каждой итерации. Дальнейший граф стройте от порта
completed. - Чтение элементов через
nodes.{{ nodes.<нода тела>.output }}за пределами цикла хранит только последнюю итерацию. Весь результат — на выходе самой нодыmap. - Ошибка одной итерации останавливает весь цикл, и собранный массив не возвращается. Если сбои ожидаемы, обработайте их внутри тела веткой ошибки.
Входы
| Порт | Провод | Данные | Примечания |
|---|---|---|---|
Массивinput | Исполнение + данныеexecute_data | — | Запускает шаг и приносит список: массив JSON или строку с массивом. |
Значение элементаend | Исполнение + данныеexecute_data | — | Значение, которое вернул один проход тела: оно станет записью этого элемента в итоговом списке. |
Выходы
| Порт | Провод | Данные | Примечания |
|---|---|---|---|
Готово · собранный списокcompleted | Исполнение + данныеexecute_data | — | |
Элементitem | Исполнение + данныеexecute_data | — |
Настройки
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
Включить индексinclude_index | boolean | false | Если включено, каждая итерация передаёт на порт item словарь {item_key: element, index: n}. Если выключено, порт item несёт значение элемента массива напрямую (без обёртки-словаря). |
Ключ элементаitem_variable | string | item | Ключ для текущего элемента в словаре payload (с индексом) на порту item. показывается при «Включить индекс» = да |
Макс. одновременных запусковmax_concurrency | integer | 10 | Максимальное число параллельных запусков подграфа, когда включено параллельное выполнение. |
Параллельное выполнениеparallel_execution | boolean | false | Запускать итерации подграфа параллельно; каждый запуск всё равно держит глобальный лок, поэтому внутренние ноды видят согласованный payload (только map/filter). |
Общие поля
Эти три поля есть у каждой ноды: платформа добавляет их сама, а не автор ноды.
expose_error_output— Если включено, показывает выход выполнения для подключения нод, которые запускаются при сбое этой ноды.split_ports_in— Показывать отдельные порты входа для выполнения и данных вместо одного объединённого.split_ports_out— Показывать отдельные порты выхода для выполнения и данных вместо одного объединённого.