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

Цикл While

Повторяет тело цикла пока условие истинно. Порты Start/End — чистый exec (данные не передаются). Done возвращает исходный Input. Опциональный порт Status объясняет причину остановки: condition_false или max_iterations.

Цикл While
InputResult
EndStart
Status

Тип в графе: while_loop

ExecSubgraph

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

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

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

Повтор с ограничителем

Условие проверяется перед каждым проходом, поле «Макс. итераций» страхует от бесконечного цикла, порт Status объясняет остановку.

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

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

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

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

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

На input (Input) приходит команда запуска и значение. Порты start (Start) и end (End) ограничивают тело цикла — это чистые exec-порты, данные по ним не передаются. Порт completed (Done) срабатывает один раз после остановки и отдаёт то же значение, которое пришло на input.

Условие вычисляется перед каждым проходом, включая первый: если оно ложно сразу, тело не выполнится ни разу, а completed всё равно сработает. Тело обязано менять то, что читает условие, — иначе цикл дойдёт до потолка. Значения между проходами передают переменные (нода var_set, область Session) или выходы нод тела: {{ nodes.<id>.output }}.

Число проходов ограничено дважды: полем «Макс. итераций» и общим потолком движка — по умолчанию 100. Включённый порт status (Status) сообщает, почему цикл остановился: condition_false или max_iterations; то же значение доступно как {{ nodes.<id>.status }}. Пока цикл идёт, доступна служебная переменная {{ variables.loop_index }} — номер текущего прохода, считая с нуля; после выхода из цикла она исчезает.

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

  • Условие в смешанной форме. Как и у if, запись {{ counter }} < 5 and {{ flag }} после подстановки перестаёт быть одним сравнением, а непустая строка истинна — цикл упрётся в потолок. Пишите условие целиком внутри {{ }}.
  • Опечатка в пути даёт ноль итераций. Несуществующий путь подставляется пустым, условие считается ложным, тело помечается «Тело цикла ни разу не выполнялось», а запуск — успешным. В журнале запуска остаётся предупреждение о нераспознанных путях.
  • Счётчик по loop_index смещён на единицу. На первой проверке переменной ещё нет, а на последующих она равна номеру предыдущего прохода, поэтому условие loop_index < 2 даёт три прохода. Точное число повторов задавайте полем «Макс. итераций».
  • Ожидание данных на порту Start — это ребро несёт только команду исполнения.
  • Переменная области Thread в условии. В {{ variables.<имя> }} попадают только переменные области Session; значение thread-переменной читайте через выход её var-ноды.
  • Цикл внутри цикла отвергается валидатором: ставьте циклы последовательно или переносите внутренний обход в code_javascript.
  • Пустое условие не задеплоится — выражение обязательно.

Входы

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

Execution trigger and payload passed through to Done

EndendИсполнениеexecute

Выходы

ПортПроводДанныеПримечания
ResultcompletedИсполнение + данныеexecute_data
StartstartИсполнениеexecute
StatusstatusДанныеdata

показывается, когда expose_status = true

Настройки

ПолеТипПо умолчаниюОписание
Условиеcondition_expressionstring""

Цикл продолжается, пока это выражение истинно

поддерживает шаблоны

Показать порт Statusexpose_statusbooleanfalse

Показать data-выход Status с причиной завершения (condition_false или max_iterations)

Макс. итерацийmax_iterationsintegernull

Максимальное число итераций (null = без ограничения, ограничено лимитом движка)

Общие поля

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

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