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

Маппинг

Обходит JSON-массив с ED-порта «Input». Для каждого элемента запускает подграф item→end и собирает сырое значение с порта end в выходной массив (порядок совпадает с входным массивом). Результат ноды — сам этот массив. Опционально — параллельное выполнение с ограничением конкурентности.

Маппинг
ArrayResult
ItemItem

Тип в графе: map

ExecSubgraph

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

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

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

Преобразование каждого элемента

Тело возвращает новое значение для элемента, нода собирает значения в массив того же порядка.

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

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

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

Берите эту ноду, когда из каждого элемента массива нужно получить новое значение и собрать их вместе: пересказать моделью каждый отзыв, вытащить поле из каждой строки ответа 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_indexbooleanfalse

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

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

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

показывается при include_index = true

Макс. конкурентностьmax_concurrencyinteger10

Максимальное число параллельных запусков подграфа, когда включено параллельное выполнение.

Параллельное выполнениеparallel_executionbooleanfalse

Запускать итерации подграфа параллельно; каждый запуск всё равно держит глобальный лок, поэтому внутренние ноды видят согласованный payload (только map/filter).

Общие поля

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

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