Функция $.Deferred.exceptionHook()
Определение и применение
Точка расширения $.Deferred.exceptionHook позволяет сообщать об исключениях внутри преобразований
Deferred. Она предназначена для диагностики программных ошибок, которые иначе могут остаться незамеченными в цепочке
обещаний.
Синтаксис
$.Deferred.exceptionHook = function (error, asyncError) {
console.warn(error, asyncError);
};Параметры и возвращаемое значение
error — выброшенная ошибка. asyncError — дополнительный объект, сохранённый до асинхронного
перехода функцией
$.Deferred.getErrorHook; без такой настройки он может отсутствовать. Возвращаемое значение диагностической функции не используется.
Настройка действует на подключённый экземпляр jQuery. Сохраните прежнюю функцию, если заменяете её временно. По
умолчанию jQuery предупреждает о типичных программных ошибках, например TypeError и
ReferenceError, а не о каждом ожидаемом отказе приложения.
Особенности и совместимость
Доступна с 3.0; для примера нужна полная сборка с Deferred. Диагностическая функция не восстанавливает цепочку и не
заменяет
.catch()
или
.fail(). Простой deferred.reject() сам по себе не является выброшенным исключением.
Исключения в обычных обработчиках
.done()
не следует считать автоматически перехваченными этим механизмом. Пример намеренно использует
.then(): ошибка преобразования становится отказом дочерней цепочки.
Документация
Пример использования
Диагностика и обработка отказа: попробуйте сами
Появятся диагностическое сообщение и подтверждение обработки отказа через .catch(). Используется jQuery 4.0.0.
index.html
<pre id="result"></pre>
main.js
$.Deferred.exceptionHook = function (error) {
$('#result').append('Диагностика: ' + error.message + '\n')
}
$.Deferred()
.resolve()
.then(function () {
throw new TypeError('Нет цены')
})
.catch(function () {
$('#result').append('Отказ обработан')
})
Нажмите , чтобы запустить пример.