Все ноды/Logic & Flow/Iteration
Фильтр
Обходит JSON-массив с ED-порта «Input». Для каждого элемента запускает подграф; значение с порта end должно быть строго bool. При true исходный элемент попадает в выходной массив; при false — отбрасывается. Порядок сохранён. Результат ноды — отфильтрованный массив.
Тип в графе: filter
ExecSubgraph
Можно включить ветку ошибки (expose_error_output) и обработать сбой отдельным путём.
Порты можно разделить на исполнение и данные (split ports).
Как попробовать
Отбор элементов по условию
Тело возвращает «да» или «нет» для элемента, нода оставляет в массиве только подошедшие.
- Исполнение + данные
Запускается сразу
Как применять
Берите эту ноду, когда из массива надо оставить часть элементов, ничего в них не меняя: отобрать заказы дороже порога, оставить только письма с вложением, отсеять строки, которые модель признала нерелевантными. Если элементы надо преобразовать — это map; если результат не нужен вовсе — for_each. Отбор по простому признаку, который считается прямо из данных, короче выразить фильтрами Jinja в template или одной нодой code_javascript; цикл нужен, когда решение принимает модель или внешний сервис.
Как это работает
На input (Array) приходит массив и команда запуска. Порт item (Start) начинает тело,
end (End) его замыкает. Для каждого элемента выполняется тело, и значение на end
трактуется как ответ «оставить или нет». В выходной массив попадает исходный элемент, а
не то, что вернуло тело; порядок сохраняется. Результат ноды — отфильтрованный массив:
{{ nodes.<id>.output }}.
Значение на end должно быть настоящим логическим. Шаблон вида {{ inputs.input.score > 5 }}
подходит: он отдаёт True или False, и нода их понимает. Строки "true", "да", 1 и
пустая строка не подходят — итерация упадёт с сообщением, в котором указан номер элемента и
что именно пришло.
Флаги «Включить индекс» и «Параллельное выполнение» работают так же, как у map: с индексом
на item уходит объект {<ключ элемента>: значение, index: N}, а параллельный режим
планирует итерации одновременно, но тела выполняются под общей блокировкой.
Частые ошибки
- Тело возвращает не логическое значение. Самый частый случай — шаблон, который отдаёт
текст или
"true"строкой. Пишите сравнение целиком внутри{{ }}. - Попытка изменить элемент. Значение с
endиспользуется только как признак; чтобы получить преобразованные элементы, нуженmap(можно сначала отфильтровать, потом преобразовать). - На вход подан объект, а не массив. Поставьте перед циклом
templateс{{ inputs.input.items | tojson }}; валидатор предупреждает об этой связи заранее. - Тело не замкнуто. Ребро из
itemи ребро вendобязательны, иначе воркфлоу не задеплоится. - Цикл внутри цикла. Вложенные циклы отвергаются валидатором: ставьте их
последовательно или переносите внутренний обход в
code_javascript. - Ребро из тела «наружу». Продолжение от нод тела выполняется на каждой итерации;
дальнейший граф стройте от порта
completed(Done). - Ошибка одной итерации останавливает весь цикл — отфильтрованный массив не вернётся вовсе.
Входы
| Порт | Провод | Данные | Примечания |
|---|---|---|---|
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_key: element, index: n} на порт item. Когда выключено, порт item несёт само значение элемента массива (без обёртки-словаря). |
Ключ элементаitem_variable | string | item | Ключ для текущего элемента в словаре payload (вместе с индексом) на порту item. показывается при include_index = true |
Макс. конкурентностьmax_concurrency | integer | 10 | Максимум параллельных запусков подграфа при включённом parallel_execution. |
Параллельное выполнениеparallel_execution | boolean | false | Планирует итерации подграфа параллельно; каждый запуск всё равно удерживает глобальную блокировку, поэтому внутренние ноды видят согласованный payload (только map/filter). |
Общие поля
Эти три поля есть у каждой ноды: платформа добавляет их сама, а не автор ноды.
expose_error_output— Если включено, показывает выход выполнения для подключения нод, которые запускаются при сбое этого шага.split_ports_in— Показывать отдельные порты входа для выполнения и данных вместо одного объединённого.split_ports_out— Показывать отдельные порты выхода для выполнения и данных вместо одного объединённого.