Историческая функция $.Deferred.getStackHook()

Определение и применение

Точка расширения $.Deferred.getStackHook сохраняла сведения о месте запуска цепочки до асинхронного перехода. Они передавались диагностическому обработчику при исключении и помогали связать ошибку с вызывающим кодом.

Синтаксис

JavaScript
// Исторический вариант для 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
HTML
<pre id="result"></pre>
main.js
JavaScript
$.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 () {})