1. 捕获非期约异常
比如你使用一个没有定义的变量, 肯定会报错 is not defined
, 这个时候错误监听就生效了
在函数里面返回一个ture,浏览器就不会继续提示错误了, 代码里面没有使用 catch
event 内部参数信息:
message:错误信息(字符串)。可用于HTML οnerrοr=""处理程序中的event。
source:发生错误的脚本URL(字符串)
lineno:发生错误的行号(数字)
colno:发生错误的列号(数字)
error:Error对象(对象)
window.removeEventListener('error', event => {
console.warn(event)
event.preventDefault()
})
2. 捕获期约异常(Promise)
如果期约被拒绝有没有 .catch()
函数处理它, 可以通过定义 unhandledrejection
, 不过如果使用 vue 框架, 记得在适合的时候 removeEventListener
,event.preventDefault()
是用来让浏览器不会继续提示错误的
window.addEventListener('unhandledrejection', function (event) {
console.warn(`UNHANDLED PROMISE REJECTION: ${event.reason}`)
event.preventDefault()
})
如果两个错误 (promise, no promise) 发生的位置特别近, 会出现漏掉错误的问题