jQuery.Deferred.getErrorHook()Возвращает: Error
Описание: Возвращает экземпляр Error с заданным стеком вызовов.
-
добавлено в версии: 3.7jQuery.Deferred.getErrorHook()
- Этот метод не принимает аргументов.
Примечание: этот API не определён по умолчанию, но jQuery будет использовать его, если он определён.
Если jQuery.Deferred.getErrorHook определён, он расширяет возможности jQuery.Deferred, добавленные в jQuery 3.0, включая ошибку, перехваченную до асинхронного барьера, когда Deferred выбрасывает исключение. Это упрощает поиск ошибок программирования, возникающих внутри Deferred. Ниже приведён пример реализации, который можно скопировать и вставить, либо можно использовать плагин jquery-deferred-reporter.
jQuery.Deferred.getErrorHook = function() {
try {
throw new Error( "Exception in jQuery.Deferred" );
} catch ( err ) {
return err;
}
}; Если этот API определён, возвращаемая им ошибка передаётся в jQuery.Deferred.exceptionHook в качестве второго параметра.
Зачем нужен этот API?
До jQuery 3.0 выполнение Deferred просто прекращалось, а браузер выводил сообщение в консоль, если происходило исключение, например, при попытке вызвать неопределённый метод как функцию (например, myobject.missingFunction()). Начиная с версии 3.0, jQuery.Deferred следует спецификации Promise/A+, если вы используете метод .then. Согласно спецификации, все ошибки должны перехватываться Promise, что предотвращает вывод ошибок в консоль. Если пользователь забыл добавить обработчик для отклонённых промисов, ошибка может быть молча проигнорирована без какого-либо уведомления!
Встроенный объект Promise, реализованный в браузере, отслеживает отклонения Promise и сообщает о проблемах в консоли. Однако выполнять аналогичное отслеживание в JavaScript гораздо сложнее. Сам jQuery не может использовать встроенный Promise, поскольку jQuery.Deferred реализует расширенный вариант Promise с дополнительными возможностями, необходимыми для таких методов, как .done или .fail, а также потому, что Promise реализован не на всех платформах, которые поддерживает jQuery.