Циклы
loop объединяет перебор коллекции (each) и повтор до условия (until).
Параметры
| Поле | Назначение | По умолчанию |
|---|---|---|
mode | each или until | Обязательно |
steps, outputs | Тело и результат итерации | Обязательно |
items | Массив для each | Обязательно для each |
max_items | Предельное число элементов до начала работы | 100 |
concurrency.limit | Одновременные элементы each, 1–8 | 2 |
on_error | fail или collect для each | fail |
until | Условие завершения until | Обязательно для until |
max_iterations | Положительный лимит итераций until | Обязательно для until |
interval_seconds | Пауза между повторениями | 0 |
on_exhaust | fail или return | fail |
initial_state, next_state | Начальное состояние и обновление until | {}, не задано |
when | Условие выполнения всего цикла | Без условия |
Пример
- id: batch
loop:
mode: each
items: "{inputs.records}"
max_items: 100
concurrency: {limit: 2}
steps:
- id: record
block: data
params:
operation: build
value:
index: "{loop.index}"
item: "{loop.item}"
outputs:
record: "{record.value}"Результат
each: items: [{index, status, output, error}], count; порядок исходного массива сохраняется. В теле доступны {loop.item}, {loop.index} с нуля, {loop.count}.
until: iterations, satisfied, last, state. В теле доступны {loop.iteration} с единицы и {loop.state}.
Поведение
Пустой each успешен; превышение max_items отклоняется до начала. collect собирает ошибки по элементам. fail прекращает запуск новых элементов и дожидается активных. Согласование элемента не повторяет завершённых соседей.
until выполняет тело минимум один раз, последовательно: собирает outputs, обновляет next_state, затем проверяет until. Лимит также ограничивается настройками установки. При исчерпании fail останавливает путь, return возвращает satisfied=false и последнее значение.
Пример until
- id: wait_result
loop:
mode: until
max_iterations: 5
interval_seconds: 2
steps:
- id: poll
block: http
params:
url: "{inputs.status_url}"
outputs:
response: "{poll.json}"
until:
value: "{poll.json.ready}"
op: equals
expected: trueДля переноса данных между итерациями используйте initial_state и next_state; не читайте историю по скрытым именам шагов.