jQuery.Deferred.getErrorHook()


jQuery.Deferred.getErrorHook()返回: Error

描述: 返回一个具有已定义堆栈的 Error 实例。

注意: 此 API 默认未定义,但 jQuery 在定义后会使用它。

jQuery.Deferred.getErrorHook 被定义时,它会扩展 jQuery 3.0 中添加的 jQuery.Deferred 功能,包括在异步屏障之前捕获错误,无论何时 Deferred 抛出异常。这使得查找 Deferred 内部发生的编程错误变得更容易。您可以在下面找到一个可以复制粘贴的示例实现,或者您可以使用 jquery-deferred-reporter 插件。

1
2
3
4
5
6
7
jQuery.Deferred.getErrorHook = function() {
try {
throw new Error( "Exception in jQuery.Deferred" );
} catch ( err ) {
return err;
}
};

当定义时,此 API 返回的错误将作为第二个参数传递给 jQuery.Deferred.exceptionHook

为什么存在这个 API?

在 jQuery 3.0 之前,如果发生异常(例如尝试将未定义的方法作为函数调用,如 myobject.missingFunction()),Deferreds 会简单地终止,浏览器会在控制台上生成一条消息。从版本 3.0 开始,当您使用 .then 方法时,jQuery.Deferred 遵循 Promise/A+ 规范。该规范要求所有错误都必须被 Promise 捕获,这会阻止控制台错误被记录。如果用户忘记为被拒绝的 Promise 添加处理程序,这可能会导致错误被静默吞没,而没有任何通知!

浏览器中实现的本地 Promise 对象会跟踪 Promise 拒绝并在控制台上报告问题。然而,在 JavaScript 世界中进行相同类型的报告要困难得多。jQuery 本身无法使用本地 Promise,因为 jQuery.Deferred 实现了 Promise 的超集,需要额外的功能,例如 .done.fail 方法,并且 Promise 并非在 jQuery 支持的所有平台上都实现。