我跳转到node.js项目,其中一些错误无声地失败,除非我把它放在try..catch
块中,否则应用程序不会抛出任何错误。例如:
console.log(ok) // doesn't throw any errors during runtime; the api just fails silently.
try {
console.log(ok)
} catch(e) {
console.log(e)// throws ReferenceError: ok is not defined
}
有谁知道为什么会这样?
提前谢谢!
答案 0 :(得分:4)
有谁知道为什么会这样?
显然,包含范围内的代码正在捕获并抑制错误。这是一种不幸但常见的做法。
可悲的是,你只需要根除那些代码,没有真正的捷径。您可以使用--inspect
(在最新版本的Node上)运行,并告诉调试器停止所有异常,甚至是已捕获的异常,这可能会帮助您跟踪它们。但是我害怕它会很乏味。
还有一种可能的想法:只有稍微旧版本的Node,未报告未处理的Promise拒绝。因此,如果该代码在(例如)Promise执行者(您传递的函数new Promise
)或then
或catch
处理程序(或async
函数)内部,则抛出正在被转变为承诺拒绝。最新版本的Node报告未处理的Promise拒绝。 (在不久的将来,他们也将终止节点过程。)