已经在try / catch块中的JSON.parse仍会引发语法错误

时间:2016-05-10 18:50:43

标签: javascript json node.js callback

parseJsonMsg(msg, jsonCallBack) {
  try {
    let content = JSON.parse(msg.content);
    jsonCallBack(null, content);
  } catch (err) {
    console.log('[MSG processing ERROR]: ', err.message);
    jsonCallBack(err);
  }
}

此代码用于在无法解析消息时记录错误。 除了日志记录之外,如果无法解析,则会抛出语法错误。为什么会这样?如何处理?

任何建议都会很棒

2 个答案:

答案 0 :(得分:2)

我怀疑这是你传入的方法作为抛出错误的参数。确保jsonCallBack执行自己的错误处理。你收到的错误是什么?

可以在任何地方抛出错误,包括内部catch块。如果在catch块中抛出错误,它将覆盖堆栈,直到它被捕获或堆栈耗尽并且它成为未捕获的异常。

答案 1 :(得分:0)

有点改写

parseJsonMsg(msg, jsonCallBack) {
  var err;
  var content;
  try {
    content = JSON.parse(msg.content);
  } catch (ex) {
    console.log('[MSG processing ERROR]: ', err.message);
    err = ex;
  }
  jsonCallBack(err, content);
}

然后如上所述,解析错误将转发给jsonCallBack(err)

中的调用者

因此可能是调用者抛出错误。

要解决您的问题,您不应该对该调用jsonCallBack(err)发表评论,但是,根据调用者的类型,绑定其错误处理程序,然后决定该怎么做。