Перейти к основному содержимому

Обработка ошибок в приложении

В процессе работы приложения на базе Платформы могут возникать следующие типы ошибок:

  • Серверные ошибки возникают при использовании методов получения данных от бэкенд-сервисов, например, при использовании метода executeAction() библиотеки FrontendCore.
  • Клиентские ошибки возникают при выполнении скриптов в секции Scripts и при выполнении обработчиков событий компонентов экранных форм.

В Платформе ошибки обоих типов перехватываются и обрабатываются по умолчанию экранной формой error.mdcontainer системного проекта.

В Платформе существуют следующие способы обработки ошибок:

  • Перехват ошибки с помощью синтаксической конструкции try..catch и описание обработчика ошибки без ожидания выполнения кода, описанного в error.mdcontainer.

    Если в блоке try нет ошибок, блок catch игнорируется. Если в блоке try возникает ошибка, управление передается блоку catch.

    Если в блоке catch присутствует оператор throw, блок catch не отменяет логику по умолчанию, описанную в error.mdcontainer, а дополняет ее. Если в блоке catch не используется оператор throw, генерирующий ошибку, происходит замена логики, описанной по умолчанию.

    Любой блок кода можно обернуть в конструкцию try..catch и в блоке catch описать логику, отличную от логики по умолчанию.

    Следующий пример демонстрирует перехват серверной ошибки и вывод ошибки в консоль браузера. Экранная форма error.mdcontainer по-прежнему отображается, поскольку в блоке catch используется оператор throw.

    <Button
    OnClick={async () => {
    try {
    const result = await executeAction('ErrorUnexpected')
    } catch(e) {
    console.log(e);
    throw e;
    }
    }}
    />

    Следующий пример демонстрирует перехват клиентской ошибки и вывод ошибки в консоль браузера. Экранная форма error.mdcontainer по-прежнему отображается, поскольку в блоке catch используется оператор throw.

     <Button
    OnClick={() => {
    try {
    doSomethingInvalid();
    } catch(e) {
    console.log(e);
    throw e;
    }
    }}
    />

    Альтернативой конструкции try..catch является конструкция then()..catch(), которая выполняет ту же функцию, но записывается иначе. Метод then() выполняется при успешном выполнении асинхронной операции. Метод catch() выполняется при ошибке выполнения асинхронной операции.

  • Изменение логики обработки ошибки, описанной в коде экранной формы error.mdcontainer. Например, можно анализировать коды ошибок и отображать определенный текст ошибки или определенную экранную форму в соответствии с определенным кодом.