开发者问题收集

如何强制 js 忽略未捕获的错误并继续工作?

2016-10-08
8925

当运行与某些第三方库集成的 javascript 应用程序时,在某些情况下,第三方库会导致错误,例如,以下典型错误: 未捕获(在承诺中)TypeError:无法读取未定义的属性“length” 上述错误在某种程度上是可以接受的,因为它们的代码质量不佳(好的代码在访问对象之前应该始终检查对象是否存在、数组长度是否大于 0 等),我担心的是:我不希望 js 应用程序像崩溃了一样运行,即使导致上述错误的根本原因消失(例如,数组现在已经存在),应用程序也无法继续运行。 是否有某种方法可以强制 js 应用程序在第三方代码失败(或我自己的代码失败)后运行,但应该继续运行其他功能区域(没有导致崩溃的区域),或者如果导致上述异常的原因消失,继续运行? 请注意,我不想触碰第三方代码来实现此功能 javascript 中是否有一个通用机制可以开启:直接跳过未捕获的错误并继续正常运行,而不会使应用程序崩溃?

2个回答

正如 Nirus 所说,将所有可能导致错误的内容包装在 try...catch 块中:

try{
  callYourLibHere();
}

块应允许代码忽略抛出的错误,这将使代码在发生错误后继续运行。但是,这将隐藏此块内的每个错误。我们可以通过将错误记录到控制台来修复此问题:

try {
   callYourLibHere();
}
catch (e) {
   console.log(e);
}

请注意,尝试解决错误而不是忽略它们是解决此问题的更好方法。

2016-10-08

如果您不想使用 try-catch

process.on('uncaughtException', err => {
  console.error('There was an uncaught error', err)
  process.exit(1) //mandatory (as per the Node.js docs)
})

如果您不退出该进程,它可能会导致应用程序出现意外行为,这就是建议这样做的原因。

进一步 阅读

Gaurav Sharma
2021-03-11