Javascript 捕获,但仍然抛出错误

标签 javascript try-catch throw

我构建了一个 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>

问题摘要:如何捕获错误,同时仍将其报告给浏览器?

最佳答案

如果您希望循环完成(即调用所有函数),则不能在其中抛出错误。实现您想要的效果的一种方法是保存错误并在循环后将其抛出,即

var error = null;
for (...) {
  try {
    ...
  }
  catch(e) {
    error = e;
  }
}
if(error != null) { throw error; }

这只会传播最后一个错误。如果您想捕获发生的所有错误,则需要将它们合并为一个错误,然后您可以再次抛出该错误。

Tom 的替代解决方案

您还可以在抛出上设置超时,这样就不会干扰函数的执行。

function doSomeStuff() {
  for (var i in arguments) {
    try { 
      arguments[i].apply(this);
    }
    catch (e) {
      setTimeout(function() { throw e; }, 100);
    }
  }
}

关于Javascript 捕获,但仍然抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15571809/

相关文章:

javascript - 如何将 conkeror-rc 配置拆分为多个文件?

c++ - 如何在 Linux C++ 中捕获系统级异常?

JavaScript try...catch for defineProperty 不工作

java - 带异常处理的 while 循环

Java 异常阻止关闭程序(单击 X 按钮时)

c++ - 构造函数和高级异常抛出 C++

javascript - WebGL 在给定中心上旋转

javascript - 将 geoJSON 要素属性添加到 Mapbox 弹出窗口

javascript - 使用jquery简单的dom遍历

python mysql 写入错误