如何在使用 window.onerror 处理语句 1 中的错误时继续执行语句 2

How to continue to statement2 while processing errors from statement1 with window.onerror

本文关键字:语句 错误 继续 执行 window 处理 onerror      更新时间:2023-09-26

我使用 window.onerror(message,url,line) 来记录我的错误消息,因为它为我提供了比try{}catch(e){}更多的调试信息。

但是,请考虑以下事项:

function1(); // Generates error
function2(); // Will not be executed

如何确保函数 2 在仍然使用 window.onerror 时触发

你不能。如果您需要允许以后的代码执行的错误处理,则必须使用 try..抓住。

幸运的是,JavaScript没有任何等同于VB6 On Error Resume Next的东西;它会使许多糟糕的JavaScript代码变得更糟。

在这里做了你的小提琴的分叉,我所做的只是用捕获的错误显式触发 window.onerror 事件。

似乎几乎是真的:)

try
{
    function2();
}
catch(error)
{
    window.onerror(error);
}

更新

找到了一种方法来获取行号和 url。代码目前有点混乱,但可以工作,所以它应该让你开始......

try
{
    function1();
}
catch(error)
{
    var url = error.stack.split(''n')[1].match(/'(.+')/g)[0];
    var line = url.match(/'/':[0-9]+.+$/g)[0];
    url = url.replace('(','').replace(line,'');
    line = line.replace(')','').replace('/:','')
    window.onerror(error,url,line);
}

这是工作 jsfiddle

与此同时,我找到了一种使用 setTimeout 的方法,但我希望可能有更好的方法:

setTimeout(function1);
setTimeout(function2);    

见 http://jsfiddle.net/7y2Ej/1/