JS如何实现类似throw new Error()但不打错误日志、不中断文件运行
实现方法
未被捕获的throw new Error()确实会终止当前执行上下文的后续代码,同时在控制台输出带完整调用栈的错误日志。要实现同等的错误提示效果,但不中断程序后续执行,用下面两种方案就够:
- 直接打印Error实例(优先用,最简洁)
根本不需要真的执行抛出动作,直接生成Error对象传给console.error就行。控制台输出的效果和未捕获抛出的错误几乎完全一致:红色错误级别样式、带完整调用链路,而且完全不会阻塞后续代码运行:// 输出和throw一致的错误日志 console.error(new Error('这里填你要展示的错误信息')) // 后续代码正常执行,不会被中断 console.log('后续逻辑照常跑,没有任何影响') - try/catch包裹抛错逻辑
如果你已有写好的抛错分支、不方便直接改逻辑,只要在当前作用域把抛错代码包在try块里,catch到错误后自行打印、不向外重新抛出,就不会终止流程:try { // 原有抛错逻辑不用改 throw new Error('这里填你要展示的错误信息') } catch (err) { // 捕获后自行处理错误日志,不要往外抛 console.error(err) } // 后续代码正常执行 console.log('这行照样能输出')
别用全局错误监听(比如浏览器的
window.onerror、Node.js的uncaughtException事件)做这个事,全局监听是兜底处理意料之外的漏错的,拿来做常规逻辑控制很容易搞出内存泄漏、执行顺序混乱的问题。
内容的提问来源于stack exchange,提问作者Krix
相关产品推荐
相关产品推荐

