我开始在javascript对象中添加错误处理,这些对象通常使用jQuery。我的问题是,当我从jQuery方法中抛出新错误时-它不会被包装jQuery调用的catch语句捕获-它只是抛出标准错误,但不会作为日志消息登录到控制台。下面是一个例子:
var MyNamespace = MyNamespace || {};
MyNamespace.Page = function() {};
MyNamespace.Page.prototype = {
callPage : function() {
"use strict";
$(document).on('change', 'select', function(event) {
event.preventDefault();
event.stopPropagation();
throw new Error('callPage method failed');
});
},
init : function() {
"use strict";
try {
this.callPage();
} catch(errorMessage) {
console.log('Error : ' + errorMessage);
}
}
};
当我用try/catch包装回调函数的内容时,它就可以工作了:
$(document).on('change', 'select', function(event) {
try {
event.preventDefault();
event.stopPropagation();
throw new Error('callPage method failed');
} catch(errorMessage) {
console.log('Error : ' + errorMessage);
}
});
有什么想法可以简化它,为什么会这样?
在第一个示例中,< code>try/catch保护设置事件处理程序的代码,而不是事件处理程序本身的主体。该代码在事件被触发之前不会运行,此时执行早已离开了< code>try块。
考虑这个等价的例子:
try {
var foo = function() {
throw new Error("foo error");
}
}
catch (error) {
}
foo();
您不会仅仅因为在定义foo
时执行在try
块内而期望调用foo
引起的错误被捕获。
一种解决方案当然是在可能抛出的函数主体中使用try/catch
,如您所示。另一种解决方案是创建一个可重用的“捕获包装器”函数,可能像这样:
function catchIfException(func, handler) {
return function() {
try {
var args = Array.prototype.slice.call(arguments);
func.apply(this, args);
}
catch (error) {
handler(error);
}
};
}
$(document).on('change', 'select',
catchIfException(
function(event) {
event.preventDefault();
event.stopPropagation();
throw new Error('callPage method failed');
},
function(error) {
console.log("error: " + error);
}
);
);
出于某种原因,这段代码给了我一个无法捕捉的异常错误。catch块似乎没有捕捉到错误。try catch块的作用范围是否如此,以至于我不能在嵌套函数中抛出一个错误,然后期望它被一个作用范围更高的catch语句捕获?我正在使用的应用程序中的一些敏感数据已经被删除,但它预期leadInfo[ 0 / 1]将是一个32个字符的字母数字字符串,我从URL参数中提取。 这里的根本问题是我的AJAX调用从API
我有一个实现以下接口的基类,上面声明的方法抛出基本异常类型。 有许多具体的类扩展了基类,我不想在所有这些类中添加块。有没有一种方法可以处理而不添加? 接口 基层 混凝土类示例(共30个)
问题内容: 我试图确保用户输入是整数,但是当我使用下面的代码时,我只会得到语句的无限循环。关于如何改进的任何建议? 问题答案: 不会消耗无效的输入,因此它将反复尝试读取相同的无效值。要解决此问题,您需要通过调用或接受任何值来显式使用它。 顺便说一句,为使您的代码更整洁并避免昂贵的操作(如创建异常),您应使用。 这是组织代码的方法
我正在尝试将错误捕获添加到组件的渲染函数中。当我在实际的渲染函数中抛出错误时,这可以正常工作,但是如果组件的子级中存在错误,则尝试不会捕获错误(或者它们被子组件错误处理程序拦截,我不确定? 是否存在将错误强制到父级的方法。 上述工作 这上面不抓
当我在node中创建一个异步函数并使用await时,我正在使执行等待一个承诺解析(可以是一个解析或一个拒绝),我所做的是在try/catch块中放入一个await承诺,并在承诺拒绝的情况下抛出一个错误。问题是,当我在try/catch块内调用这个异步函数来捕获错误时,我会得到一个UnhandledPromiserEjectionWarning。但是使用await的全部意义并不是等待承诺解决并返回它
在我的Node.js应用程序的测试中,让Chai的 工作时遇到了问题。测试在抛出的错误上不断失败,但是如果我将测试用例包装在try和catch中,并在捕获的错误上断言,它就会工作。 不像我认为的那样工作吗? 失败: