После прочтения 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>