jQuery 延迟对象集中式全局错误处理程序
jQuery Deferred object centralized global error handler
Deferred 对象内部发生的错误会向控制台发出警告,但不会在以下位置引起注意:
window.addEventListener("error", function(e) {
// Global handler
});
如何使集中式错误处理程序适用于所有错误,包括延迟对象?
我使用的是最新的 jQuery 3.3.1,但找不到可用的解决方案。
如果您将 jquery 用于 ajax 请求,您可以这样做:
$(document).ajaxError(function(){
console.log(arguments);
}
阅读 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>
Deferred 对象内部发生的错误会向控制台发出警告,但不会在以下位置引起注意:
window.addEventListener("error", function(e) {
// Global handler
});
如何使集中式错误处理程序适用于所有错误,包括延迟对象?
我使用的是最新的 jQuery 3.3.1,但找不到可用的解决方案。
如果您将 jquery 用于 ajax 请求,您可以这样做:
$(document).ajaxError(function(){
console.log(arguments);
}
阅读 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>