> ## Documentation Index
> Fetch the complete documentation index at: https://docs.riggery.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Loop

> Повторяет узлы внутри карточки.

**Loop** повторяет узлы внутри карточки. Узлы после карточки выполняются один раз.

Предыдущий узел подключайте к ручке слева. Первый узел внутри подключайте от ручки под заголовком. Узел после цикла подключайте от ручки справа.

<h2 id="each">
  Each item
</h2>

**Each item** читает массив из JSON предыдущего узла. **Items path** по умолчанию `items` — как у [Read records](/ru/graph/tools/state-query): `{ "items": [], "nextCursor": null }`.

На каждом шаге первый узел внутри получает текущий элемент как вход. **Вставить значение** на этом ребре показывает **Item** и **Index** (Index с нуля). Узел [Code](/ru/graph/tools/code) на этом ребре видит элемент как `input`.

Пустой массив завершается с 0 итераций. Массив длиннее **Max iterations** роняет запуск до любого узла внутри.

<h2 id="while">
  While
</h2>

**While** повторяет, пока выражение истинно, либо до **Max iterations**. Выражение использует тот же `input`, что [Условие](/ru/graph/condition), плюс `index`.

Первый узел внутри на каждом шаге получает вход Loop (JSON предыдущего узла).

Если на потолке выражение всё ещё истинно, запуск успешен, а **Stopped** равен `max`.

<h2 id="done">
  After the loop
</h2>

Ручка справа срабатывает один раз. Её **Result**:

```json theme={null}
{ "iterations": 2, "stopped": "end" }
```

`stopped` — `empty`, `end`, `condition` или `max`. Результаты узлов внутри в этот JSON не копируются.

<h2 id="limits">
  Limits
</h2>

**Max iterations** не выше 100. Loop может стоять внутри другого Loop, до 3 уровней. Trigger и Respond внутрь не ставятся. Одна ошибка внутри роняет запуск.

**Запустить этот шаг** на Loop проходит все итерации. **Запустить этот шаг** на узле внутри проходит его один раз и берёт **Тестовый ввод** карточки Loop как текущий элемент.
