gpt4 book ai didi

javascript - 在哪里捕获 EVAL 中抛出的异常

转载 作者:行者123 更新时间:2023-12-02 13:42:58 26 4
gpt4 key购买 nike

以下脚本使您能够运行一段 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com