JSON.parse,已经在try/catch块中,仍然抛出语法错误


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

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

任何建议都会很棒

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

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

一点重写

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),但应根据调用方的类型,绑定其错误处理程序,然后决定要执行的操作。

最新更新