Перейти к содержанию

SDK 0.3 · формат v2 · Совместимость с SDK

Циклы ​

loop объединяет перебор коллекции (each) и повтор до условия (until).

Параметры ​

ПолеНазначениеПо умолчанию
modeeach или untilОбязательно
steps, outputsТело и результат итерацииОбязательно
itemsМассив для eachОбязательно для each
max_itemsПредельное число элементов до начала работы100
concurrency.limitОдновременные элементы each, 1–82
on_errorfail или collect для eachfail
untilУсловие завершения untilОбязательно для until
max_iterationsПоложительный лимит итераций untilОбязательно для until
interval_secondsПауза между повторениями0
on_exhaustfail или returnfail
initial_state, next_stateНачальное состояние и обновление until{}, не задано
whenУсловие выполнения всего циклаБез условия

Пример ​

YAMLОбработать каждый элемент
yaml
- 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 ​

YAMLПовторять запрос до готовности
yaml
- 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; не читайте историю по скрытым именам шагов.