Документация 0.4 Справочник действий

Попытка / перехват

control.tryCatch · Управление · контейнер

Перехватывает ошибки шагов «Try»; «Finally» выполняется всегда

Перехватывает ошибки шагов ветки „Try“: вместо остановки процесса выполняются шаги ветки „Catch“, а ветка „Finally“ выполняется всегда — и после успеха, и после ошибки. Так обрабатывают ожидаемые сбои: дубликат в очереди, неверные данные заявки, недоступный сайт — и продолжают работу со следующим элементом.

Свойства #

Свойство Имя в файле Значение Обязательное По умолчанию Описание
Переменная ошибки errorVariable имя переменной нет error

Результат #

Действие не возвращает значений.

Вложенные шаги #

Ветка Имя в файле
Try try
Catch catch
Finally finally

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

  • Переменная ошибки (errorVariable, по умолчанию error) — в ветке „Catch“ в ней объект { code, message, stepId }: код ошибки (ElementNotFound, UserThrow, QueueItemDuplicate …), текст и id шага, где она случилась. Пример условия: error.code === 'QueueItemDuplicate'.
  • Ошибка внутри „Catch“ поднимается выше — к внешнему перехвату или останавливает процесс.
  • При нажатии «Стоп» ветка „Finally“ не выполняется: запуск должен закончиться быстро.
  • Перехваченная ошибка видна в «Лог» студии и в журнале задания; шаг с ошибкой отмечается в дизайнере.

Ошибки #

Сам шаг ошибок не создаёт. Чтобы после разбора всё же завершить процесс ошибкой, добавьте в „Catch“ шаг control.throw — например, со своим текстом и {{ error.message }}.

Пример #

Пропустить заявку, которая уже есть в очереди, а другие ошибки не скрывать:

{
  "type": "control.tryCatch",
  "props": { "errorVariable": "error" },
  "children": {
    "try": [ { "type": "orch.queueAddItem", "props": { "queue": "Заявки", "payload": "row", "reference": "{{ row['Номер'] }}" } } ],
    "catch": [
      {
        "type": "control.if",
        "props": { "condition": "error.code === 'QueueItemDuplicate'" },
        "children": {
          "then": [ { "type": "control.log", "props": { "level": "warn", "message": "Заявка {{ row['Номер'] }} уже есть — пропущена" } } ],
          "else": [ { "type": "control.throw", "props": { "message": "Не удалось добавить заявку: {{ error.message }}" } } ]
        }
      }
    ]
  }
}