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