Точка расширения $.Deferred.getErrorHook
Назначение
Ошибка внутри обработчика .then() может возникнуть после завершения вызывающего кода. Точка расширения
$.Deferred.getErrorHook позволяет сохранить объект ошибки до асинхронного перехода, чтобы при диагностике
увидеть исходное место вызова.
Настройка и результат
$.Deferred.getErrorHook = function () {
return new Error("Место запуска цепочки");
};
Свойство появилось в jQuery 3.7, но функция по умолчанию не определена: её устанавливает приложение. Она не принимает
аргументов и должна возвращать Error со стеком. При исключении в цепочке сохранённый объект передаётся вторым
аргументом в $.Deferred.exceptionHook(error, asyncError).
Ограничения
Это настройка диагностики всей подключённой jQuery, а не обработчик результата операции. Ожидаемые отказы
обрабатывайте через .catch() или .fail(). Для рабочего приложения учитывайте стоимость
создания стеков. В 4.0 прежний getStackHook удалён; в slim-сборке нет самого Deferred.
Пример использования
Диагностика исключения в цепочке: попробуйте сами
Запустите пример: появятся сообщение об ошибке и подтверждение сохранённого стека. Используется полная jQuery 4.0.0.
index.html
<pre id="result"></pre>
main.js
$.Deferred.getErrorHook = function () {
return new Error("Запуск цепочки");
};
$.Deferred.exceptionHook = function (error, asyncError) {
$("#result").text(error.message + "\nСтек сохранён: " + Boolean(asyncError && asyncError.stack));
};
$.Deferred().resolve().then(function () {
throw new TypeError("Нет данных профиля");
}).catch(function () {
// Отказ обработан; сообщение уже показала функция диагностики.
});
Нажмите , чтобы запустить пример.