浏览器环境(window
)的拒绝状态监听事件
window.addEventListener('unhandledrejection', e => {
console.log('unhandledrejection', e.reason.message) // I am an unhandledrejection Error!
})
window.addEventListener('rejectionhandled', e => {
console.log('rejectionhandled', e.reason.message) // I am an rejectionhandled Error!
})
// 触发拒绝
const p1 = Promise.reject(new Error('I am an unhandledrejection Error!'))
const p2 = Promise.reject(new Error('I am an rejectionhandled Error!'))
// rejectionhandled 尚未生效,添加延时程序
setTimeout(() => {
p2.catch(e => {
console.log('catch', e.message)
})
}, 3000)
跟踪并处理程序中拒绝状态
// 初始化列表
const unhandledRejections = new Map()
// 监听未处理拒绝状态
window.addEventListener('unhandledrejection', e => {
unhandledRejections.set(e.promise, e.reason)
})
// 监听已处理拒绝状态
window.addEventListener('rejectionhandled', e => {
unhandledRejections.delete(e.promise)
})
// 循环处理拒绝状态
setInterval(() => {
unhandledRejections.forEach((reason, promise) => {
console.log('handle: ', reason.message)
promise.catch(e => {
console.log(`I catch u!`, e.message)
})
})
unhandledRejections.clear()
}, 5000)
// 触发拒绝
const p1 = Promise.reject(new Error('I am an unhandledrejection Error!'))
相关笔记