跳到主要内容

rejectionhandled

2025年01月07日
柏拉文
越努力,越幸运

一、认识


rejectionhandledPromiserejected 且有 rejection 处理器时会在全局触发 rejectionhandled 事件 (通常是发生在 window 下,但是也可能发生在 Worker 中)。应用于调试一般应用回退。当 Promiserejected 且没有 rejection 处理器处理时会触发 unhandledrejection 事件。这两个事件协同工作。

二、语法


window.addEventListener("rejectionhandled", event => {
console.log("Promise rejected; reason: " + event.reason);
}, false);

window.onrejectionhandled = ()=>{

}

三、操作


3.1 阻止默认事件

许多环境 (例如 Node.js ) 默认情况下会向控制台打印未处理的 Promise rejections。你可以通过为 rejectionhandled 事件添加一个处理程序来避免这种情况的发生,该处理程序除了执行你希望执行的任何其他任务之外,还可以调用 preventDefault() 来取消该事件,从而阻止该事件冒泡并由运行时的日志代码处理。这种方法之所以有效,是因为 rejectionhandled 事件是可以取消的。

  • window.addEventListener: 通过 e.preventDefault() 取消默认事件

  • window.onrejectionhandled: 通过 return true 来取消默认事件

四、场景


4.1 window.addEventListener 捕获 rejections

<script>
window.addEventListener(
"rejectionhandled",
(event) => {
console.log("Promise rejected; reason: " + event.reason);
},
false
);
</script>

<script>
new Promise((resolve, reject) => {
reject(1);
}).then(
() => {},
(err) => {
console.log(err);
}
);
</script>

4.2 window.onrejectionhandled 捕获 rejections

<script>
window.onrejectionhandled = (event) => {
console.log("Promise rejected; reason: " + event.reason);
};
</script>

<script>
new Promise((resolve, reject) => {
reject(1);
}).then(
() => {},
(err) => {
console.log(err);
}
);
</script>