以下脚本使您能够运行一段 JavaScript 代码。 try/catch block 正在捕获错误。
try {
var result = eval(script);
} catch (e) {
// do something meaningful
}
但是,如果变量 script
包含例如 AJAX 调用,并且此 ajax 调用抛出异常(例如在 success 函数中),则此 try/catch block 不会捕获此异常...
// execute an AJAX request
var script = '$.ajax(url:"/somewhere", success: function(){throw new MyException('testexception')})';
try {
var result = eval(script);
} catch (e) {
// will not be triggered...
}
问题:如何捕获ajax请求中抛出的异常?
最佳答案
我希望您意识到使用 eval
的危险,如果没有,有很多好文章可以解释为什么这不是一个好主意。
话虽这么说,问题是成功回调是在 catch block 之后调用的。您需要在成功回调中添加 try/catch
block ,或者需要从更全局的 Angular 处理错误。我能想到的一个想法是使用 window.onerror事件。我下面有一个示例,它显示了与您的问题类似的情况,并且显示您可以捕获 eval
中抛出的错误。
(function() {
'use strict';
window.addEventListener('error', e => console.log(`window.onerror: ${e.message}`));
let script = `setTimeout(function() {
throw new Error('Whoops!');
}, 0);`;
eval(script);
script = `throw new Error('Whoops!');`;
try {
eval(script);
} catch (e) {
console.log(e.message);
}
})();
关于javascript - 在哪里捕获 EVAL 中抛出的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44314994/