我已经构建了一个javascript函数,它将多个ajax函数合并为一个请求。对于每个请求,几乎总有一个回调函数。捆绑函数一次调用一个回调函数。
我用try catch包围了这些,以防止一个函数阻止其他函数运行。但是,我仍然希望浏览器通知我有关javascript错误的信息。我怎么能这样做?
我已经举例说明了我要做的事情here。
上面jsfiddle链接的代码:
<script>
function doSomeStuff() {
for (var i in arguments) {
try {
arguments[i].apply(this);
}
catch (e) {
throw e;
}
}
}
doSomeStuff(function() { console.log("i'm an apple"); },
function() { imnotavariable = test; },
function() { console.log("i'm an apple too"); });
</script>
问题摘要:如何在仍然向浏览器报告错误的同时发现错误?
答案 0 :(得分:3)
如果你想完成循环(即调用所有函数),你就不能在其中抛出错误。实现你想要的一种方法是保存错误并在循环之后抛出它,即
var error = null;
for (...) {
try {
...
}
catch(e) {
error = e;
}
}
if(error != null) { throw error; }
这只会传播最后一个错误。如果你想捕获所有发生的错误,你需要将它们合并为一个可以再次抛出的错误。
您还可以在throw
上设置超时,以便它不会干扰函数的执行。
function doSomeStuff() {
for (var i in arguments) {
try {
arguments[i].apply(this);
}
catch (e) {
setTimeout(function() { throw e; }, 100);
}
}
}
答案 1 :(得分:0)
您需要通过“仍然向浏览器报告”来定义您的意思。
简短的回答可能是,如果你有一些备用的记录系统,你可以尝试做类似的事情:
var apperrors;
function appLog(error){
apperrors = apperrors || [];
apperrors.push(error);
//maybe trigger an app error event?
}
function doSomeStuff() {
for (var i in arguments) {
try {
arguments[i].apply(this);
}
catch (e) {
appLog(e);
}
}
}
然后对你的错误做点什么。你并没有真正描述那些东西。
按照以下评论:如果您发现错误,您可以看到三个操作过程:
我重新抛出你没有获得任何东西的错误,除非你做了'额外'的事情。