Exit
Exit — досрочно останавливает выполнение реакций в текущем контексте.
📝 Назначение
Используется для немедленного прекращения выполнения текущего триггера или полной остановки всей цепочки реакций (включая вызванные триггеры).
Когда это нужно:
- Обнаружена критическая ошибка — дальнейшее выполнение невозможно
- Условия для продолжения не выполнены
- Необходимо предотвратить выполнение остальных реакций
💡 Совет:
Exitобычно ставится под условием (через требования реакции), чтобы остановка происходила только в определённых случаях.
⚙️ Параметры
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| Полный выход | Boolean | ❌ Нет | Режим остановки (по умолчанию выключен) |
Режим «Полный выход»
| Режим | Поведение |
|---|---|
| Выключен (по умолчанию) | Остановка только текущего триггера. Если триггер был вызван из другого (через RunTrigger), тот продолжит выполнение |
| Включён | Полная остановка — прерывается всё выполнение реакций, включая вызвавшие триггеры |
🧪 Примеры использования
Пример 1: Остановка при ошибке (текущий триггер)
Задача: При отсутствии обязательной переменной прекратить выполнение.
Реакции:
GetVarCloud→name:user_tokenTriggerFolderс условием:Has→${var.person.user_token}(переменная отсутствует)
- Внутри:
Exit(остановка текущего триггера)
SendMessage→ текст:Ваш токен: ${var.person.user_token}
Результат: Если переменной нет — выполнение прекращается, SendMessage не отправляется.
Пример 2: Полная остановка всех триггеров
Задача: При критической ошибке прекратить выполнение всех вызванных триггеров.
Ситуация: Триггер А вызывает через RunTrigger триггер Б. В триггере Б произошла критическая ошибка.
В триггере Б:
TriggerFolderс условием: критическая ошибка
- Внутри:
Exit→Полный выход:true
Результат: Выполнение прекращается и в триггере Б, и в триггере А. Реакции после RunTrigger в триггере А не выполняются.
Пример 3: Проверка прав доступа
Задача: Если пользователь не является администратором — прекратить выполнение.
Реакции:
GetVarCloud→name:is_adminTriggerFolderс условием:Bool→${var.person.is_admin}=false
- Внутри:
SendMessage→ текст:У вас нет прав для выполнения этой команды. - Внутри:
Exit
SendMessage→ текст:Добро пожаловать в админ-панель.
Пример 4: Остановка при достижении лимита
Задача: Если пользователь превысил лимит операций — прекратить выполнение.
Реакции:
GetVarCloud→name:operations_todayTriggerFolderс условием:${var.person.operations_today} >= 10
- Внутри:
SendMessage→ текст:Превышен суточный лимит операций. - Внутри:
Exit
AddVarCloud→name:operations_today,value:1SendMessage→ текст:Операция выполнена.
Пример 5: Exit в середине цикла
Задача: При обработке списка прекратить выполнение при определённом условии.
Реакции:
For→Список:${var.local.items}
-
Внутри:
SendMessage→ текст:Обработка: ${loop.item} -
Внутри:
TriggerFolderс условием:${loop.item} == "stop" -
Внутри:
SendMessage→ текст:Обнаружен стоп-сигнал. Остановка. -
Внутри:
Exit
SendMessage→ текст:Это сообщение не отправится, если Exit сработал
Пример 6: Exit без полного выхода в вызванном триггере
Задача: Вызванный триггер останавливается сам, но вызывающий продолжает работу.
Триггер А (вызывающий):
RunTrigger→Триггер:check_dataSendMessage→ текст:Это сообщение отправится всегда
Триггер Б (check_data):
TriggerFolderс условием: данные некорректны
- Внутри:
SendMessage→ текст:Данные некорректны, обработка прервана. - Внутри:
Exit(полный выход выключен — по умолчанию)
Результат: Если данные некорректны — триггер Б останавливается, но триггер А продолжает выполнение и отправляет сообщение.
🔄 Отличие Exit от Break
| Характеристика | Exit | Break |
|---|---|---|
| Объект действия | Весь триггер (или вся цепочка) | Ближайший цикл For |
| Продолжение выполнения | Нет (остановка) | Да (после цикла) |
| Полный выход | Может остановить вызвавшие триггеры | Нет |
| Влияние на циклы | Полностью прекращает выполнение триггера | Выходит только из цикла |
💡 Совет: Используйте
Breakдля выхода из цикла,Exit— для полной остановки триггера.
🔄 Особенности поведения
| Ситуация | Поведение |
|---|---|
| Exit вне цикла | Останавливает выполнение триггера |
| Exit внутри цикла | Останавливает выполнение триггера (весь цикл прерывается) |
| Exit с Полным выходом = true | Останавливает все вызвавшие триггеры |
| Exit с Полным выходом = false | Останавливает только текущий триггер |
| Exit без условия | Срабатывает сразу — остановка в первой же реакции |
| Exit после Break | Недостижим, если Break завершил выполнение |
🔗 Связанные реакции
| Реакция | Назначение |
|---|---|
| For | Организация цикла |
| Continue | Переход к следующей итерации цикла |
| Break | Выход из цикла |