Spec-Zone.ru › jQuery

jQuery.Deferred.getErrorHook()

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.

© The jQuery Foundation and other contributors
Licensed under the MIT License.
https://api.jquery.com/jQuery.Deferred.getErrorHook

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API