jQuery - централизованный глобальный обработчик ошибок с отложенным объектом - PullRequest
0 голосов
/ 11 октября 2018

Ошибки, которые происходят внутри Отложенного объекта, выдают предупреждение в консоль и не замечаются:

    window.addEventListener("error", function(e) {
       // Global handler
    });

Как заставить централизованный обработчик ошибок работать для всех ошибок, включая Отложенный объект?

Я использую самую последнюю версию jQuery 3.3.1 и не могу найти решение для пробуждения.

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

После прочтения jQuery 3.3.1 (строка 3605) они фактически реализовали $.Deferred.exceptionHook для вызова при сбое отложенного объекта.

И для вашегослучай, вам просто нужно реализовать это как,

$.Deferred.exceptionHook = function (err, stackTrace) {
  // 'err' is what you throw in your deferred's catch.
  window.dispatchEvent( new CustomEvent('error', {
    detail: err
  }) );
}

Вот несколько простых примеров.

$.Deferred.exceptionHook = function (err, stackTrace) {
  // 'err' is what you throw in your deferred's catch.
  $("#errorMessage").text(err);
}

$.when(
  $.ajax( "https://example.com" ) // This should fail since SO is sandboxed.
).then(function successFn() {
  alert("Impossible thing is happening");
}, function failFn() {
  throw "A nice error";
});
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<p id="errorMessage">
  
</p>
0 голосов
/ 11 октября 2018

Если вы используете JQuery для запросов AJAX, вы можете сделать:

$(document).ajaxError(function(){
   console.log(arguments);
}
...