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

标签 javascript ajax eval

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

相关文章:

python - 文件中的 eval 行

javascript - 使用内联动画关键帧定义?

javascript - 加载外部内容,以便 Google 可以搜索以用于 SEO 目的

javascript - Ajax 调用卡住了 Internet Explorer 中的 UI,但在 Firefox 中工作正常

jquery - 自动转换 $.AJAX 响应中的所有日期

python - 在不使用 Eval 的情况下将字符串转换为 Python 中的列表?

ruby - 动态创建一个没有命名空间的类

javascript - 根据随机输入数组修改 AngularJS 中的集合

javascript - 生成文本文件

javascript - 在 Modal 中传递函数时 React Native "onPress is not a function"