跳到主要内容

unhandledrejection

2023年03月14日
柏拉文
越努力,越幸运

一、认识


Promisereject并且错误信息没有被catch处理的时候,这个错误不会被window.onerror以及window.addEventListener("error",handler,true)捕获。但是有专门的unhandledrejection事件方法进行捕获处理

二、语法


window.addEventListener("unhandledrejection", event => {
console.warn(`UNHANDLED PROMISE REJECTION: ${event.reason}`);
});

window.onunhandledrejection = event => {
console.warn(`UNHANDLED PROMISE REJECTION: ${event.reason}`);
};

Promise.reject(throw new Error("xxx"));

三、操作


3.1 阻止默认事件

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

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

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