绑定方式
- 其一
window.addEventListener("unhandledrejection", event => {
console.warn(`UNHANDLED PROMISE REJECTION: ${event.reason}`);
});
- 其二
window.onunhandledrejection = event => {
console.warn(`UNHANDLED PROMISE REJECTION: ${event.reason}`);
};
触发测试
-
Promise.reject('test').then()
捕获成功,但是仍然默认有报错提示,使用如下手段进行阻止默认行为window.addEventListener("unhandledrejection", event => { console.warn(`UNHANDLED PROMISE REJECTION: ${event.reason}`); event.preventDefault() // 通过addEventListener绑定的事件,不能通过return false来阻止默认行为 }); window.onunhandledrejection = event => { console.warn(`UNHANDLED PROMISE REJECTION: ${event.reason}`); event.preventDefault() // 或 return false };
结果如下
注意事项
-
unhandledrejection
只能捕获未显式处理的Promise
异常,如下// 能触发 unhandledrejection ,因为未显式处理 Promise.reject('test').then() // 能触发 unhandledrejection ,因为未显式处理 Promise.reject('test').then(console.log) // 不能触发 unhandledrejection ,因为已处理 Promise.reject('test').then(console.log, console.log) // 不能触发 unhandledrejection ,因为没处理,直接抛出异常 Promise.reject('test')