Обработка ошибок

Umbrella JS предоставляет лёгкий и минималистичный интерфейс для работы с DOM, AJAX и утилитарными функциями JavaScript. Несмотря на простоту, в реальных проектах необходима корректная обработка ошибок для предотвращения сбоев и обеспечения стабильного поведения приложения.

Исключения при работе с DOM

Большинство методов Umbrella JS безопасно работают с пустыми коллекциями элементов. Например:

u('.nonexistent').addClass('active'); // Ошибки не возникает, операция игнорируется

Важно: методы возвращают объект Umbrella, даже если элементы не найдены. Это позволяет безопасно вызывать цепочки методов без проверки наличия элементов.

Некорректное использование методов, например, передача невалидных аргументов, может привести к выбросу ошибок.

u('div').addClass(); // TypeError: undefined is not a string

Рекомендуется всегда проверять типы аргументов перед вызовом методов, которые изменяют DOM или атрибуты элементов.

Работа с AJAX и обработка сетевых ошибок

Umbrella JS предоставляет метод u.ajax() для выполнения асинхронных запросов. Его базовый синтаксис:

u.ajax({
    url: '/api/data',
    method: 'GET',
    success: function(response) {
        console.log('Данные получены:', response);
    },
    error: function(status, statusText) {
        console.error('Ошибка запроса:', status, statusText);
    }
});

Ключевые моменты:

  • success — вызывается при успешном ответе сервера с кодом 2xx.
  • error — вызывается при сетевой ошибке или если код ответа не входит в диапазон 200–299.
  • status — числовой код HTTP-ответа.
  • statusText — текстовое описание ошибки.

Для более сложных сценариев можно комбинировать try…catch внутри колбэков:

u.ajax({
    url: '/api/data',
    method: 'GET',
    success: function(response) {
        try {
            let data = JSON.parse(response);
            console.log(data);
        } catch (e) {
            console.error('Ошибка парсинга JSON:', e.message);
        }
    },
    error: function(status, statusText) {
        console.error('Сетевая ошибка:', status, statusText);
    }
});

Отслеживание ошибок при работе с событиями

Umbrella JS позволяет назначать обработчики событий через метод on. Ошибки в колбэках событий могут прерывать выполнение скриптов, если их не перехватывать:

u('button').on('click', function(event) {
    try {
        riskyOperation();
    } catch (e) {
        console.error('Ошибка при клике:', e.message);
    }
});

Использование try…catch внутри событий предотвращает падение других обработчиков и обеспечивает стабильность работы страницы.

Валидация аргументов

Многие методы Umbrella JS требуют строго определённого типа аргументов:

  • addClass(className: string)
  • attr(name: string, value?: string)
  • css(property: string, value?: string)

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

function safeAddClass(el, className) {
    if (typeof className === 'string') {
        u(el).addClass(className);
    } else {
        console.warn('addClass получил некорректный аргумент:', className);
    }
}

Логирование и отладка

Umbrella JS не имеет встроенной системы логирования ошибок, поэтому разработчики используют стандартные механизмы Jav * aScript:

  • console.error() для ошибок времени выполнения.
  • console.warn() для предупреждений о потенциальных проблемах.
  • console.log() для отладки и проверки данных.

Можно создать вспомогательную функцию для централизованного логирования:

function logError(context, error) {
    console.error(`[Umbrella Error] ${context}:`, error);
}

Применение такой функции повышает читаемость кода и облегчает поддержку.

Рекомендации по устойчивости кода

  1. Использовать методы Umbrella JS на заранее проверенных элементах.
  2. В AJAX-запросах всегда реализовывать обработку ошибок.
  3. Все потенциально опасные операции оборачивать в try…catch.
  4. Проверять типы и значения аргументов перед вызовом методов.
  5. Использовать логирование для фиксации и анализа ошибок.

Соблюдение этих принципов обеспечивает стабильное и предсказуемое поведение приложений на Umbrella JS, минимизируя риски сбоев и некорректного отображения интерфейса.