【问题标题】:JSON.parse, already in try/catch block, still throws syntax errorJSON.parse,已经在 try/catch 块中,仍然抛出语法错误
【发布时间】:2016-05-10 18:50:43
【问题描述】:
parseJsonMsg(msg, jsonCallBack) {
  try {
    let content = JSON.parse(msg.content);
    jsonCallBack(null, content);
  } catch (err) {
    console.log('[MSG processing ERROR]: ', err.message);
    jsonCallBack(err);
  }
}

此代码用于在无法解析消息时记录错误。 除了记录之外,如果无法解析,这会引发语法错误。为什么呢?怎么处理?

任何建议都会很棒

【问题讨论】:

  • 抛出的错误信息是什么?它是在哪条线上抛出的?
  • 您好像忘记了function关键字。
  • 在某些情况下不需要函数关键字
  • @0x539 它可能是一个类的方法。
  • 是的,我知道。但是看看他的代码我不确定它是否是一个属性。

标签: javascript json node.js callback


【解决方案1】:

我怀疑是您作为参数传入的方法引发了错误。确保 jsonCallBack 进行自己的错误处理。您收到的错误是什么?

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

【讨论】:

  • 您的评论帮助我找出了错误。谢谢,我是javascript新手。错误在于期望此回调的函数。
【解决方案2】:

重写一点

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),而是根据调用者的类型绑定其错误处理程序,然后决定要做什么。

【讨论】:

  • 感谢您的详细回复。它有帮助。
猜你喜欢
  • 1970-01-01
  • 2023-04-08
  • 2013-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-18
  • 1970-01-01
相关资源
最近更新 更多