unhandledrejection
2025年01月07日
一、认识
unhandledrejection
当 Promise
被 reject
且没有 reject
处理器的时候,会触发 unhandledrejection
事件;这可能发生在 window
下,但也可能发生在 Worker
中。这对于调试和为意外情况提供后备错误处理非常有用。
二、语法
window.addEventListener("unhandledrejection", event => {
console.warn(`UNHANDLED PROMISE REJECTION: ${event.reason}`);
});
window.onunhandledrejection = event => {
console.warn(`UNHANDLED PROMISE REJECTION: ${event.reason}`);
};
三、操作
3.1 阻止默认事件
许多环境 (例如 Node.js
) 默认情况下会向控制台打印未处理的 Promise rejections
。你可以通过为 unhandledrejection
事件添加一个处理程序来避免这种情况的发生,该处理程序除了执行你希望执行的任何其他任务之外,还可以调用 preventDefault()
来取消该事件,从而阻止该事件冒泡并由运行时的日志代码处理。这种方法之所以有效,是因为 unhandledrejection
事件是可以取消的。
-
window.addEventListener
: 通过e.preventDefault()
取消默认事件 -
window.onunhandledrejection
:
四、场景
4.1 通过 window.addEventListener 捕获 rejection
- Html
- Css
- JavaScript
<script>
window.addEventListener("unhandledrejection", (event) => {
event.preventDefault();
console.log(`UNHANDLED PROMISE REJECTION: ${event.reason}`);
});
</script>
<script>
new Promise((resolve,reject)=>{
reject(4);
});
</script>
4.2 通过 window.onunhandledrejection 捕获 rejection
- Html
- Css
- JavaScript
<script>
window.onunhandledrejection = (event) => {
event.preventDefault();
console.log(`UNHANDLED PROMISE REJECTION: ${event.reason}`);
};
</script>
<script>
new Promise((resolve,reject)=>{
reject(4);
});
</script>