JavaScript Capture处理错误

时间:2016-09-06 23:13:47

标签: javascript html5 ecmascript-6

我正在寻找一种解决方案,我可以捕获浏览器控制台中记录的所有错误(已处理/未处理)。

我知道window.onerrorwindow.addeventlistener('error', function(){})

以上代码仅捕获未处理的错误。我还需要捕获处理错误。

  

例如:

function foo() {
  var x = null;
  try {
    x.a = "";
  } catch (e) {
    //Exception will be digested here.
  }

  var y = null
  y.b = "";
}

window.onerror = function() {
  //Write logic for the errors logged in console.
}

foo();

在上面的例子中try catch就在那里,所以我只会为变量y而不是x收到错误。

有没有办法监听/捕捉catch阻止?

由于

2 个答案:

答案 0 :(得分:0)

尝试手动调用window.onerror。但是,请重新考虑改变您的方法。这非常脏。

window.onerror = function(msg, url, lineNo, columnNo, error) {
  if (error === 'custom') {
   console.log("Handled error logged");
   return true;
  }
  console.log("unhandled error")
  return false;
};

示例try / catch

var myalert = function() {
  try {
    console.log(f);
  } catch (e) {
    window.onerror('test',null,null,null,'custom');
  }
  console.log("Gets here");
}

https://fiddle.jshell.net/L29jv5fv/2/

答案 1 :(得分:0)

现实情况是,如果发现异常,那么问题就不存在了,因为您的代码知道如何处理它。

在像Java这样的其他编程语言中,总是很好的做法是只捕获你可以处理的异常,并将其他所有内容扔到链上和/或映射到另一个可能更有用的异常。调用堆栈。

例如:

function foo() {
  var x = null;
  try {
    x.a = "";
  } catch (e) {
    //Exception will be digested here.
    console.log("I am writing code here but still don't know how to proceed");
    throw new CustomError("Something was wrong");
  }

  var y = null
  y.b = "";
}