全局未处理的拒绝处理程序

时间:2018-09-13 06:34:32

标签: javascript promise event-handling

我将https://github.com/rtsao/browser-unhandled-rejection用于全局未处理的拒绝。

这是处理程序的注册方式:

window.addEventListener('unhandledrejection', (params) => {

});

我不确定如何在此callback中处理承诺?一切工作正常,每次promise失败且未实现catch时都调用此处理程序,因此我得到了'Uncaught (in promise)'

是否有一种方法可以处理unhandledrejection内部的失败承诺,因此它不会引发'Uncaught (in promise)'错误,并且promise失败的代码可以像执行catch一样正常继续?在params的论点中,我可以访问被拒绝的promise,但是我不确定应该如何处理,或者甚至有可能吗?

1 个答案:

答案 0 :(得分:1)

根据规范,该事件是可取消的,因此您可以添加

params.preventDefault(); // Note: `params` here is more idiomatically called `event`
向您的处理程序

阻止默认操作。 (这可以防止在Chrome上出现“未处理的拒绝”警告,而该警告会在没有该polyfill的情况下实现。)

示例 preventDefault

window.addEventListener("unhandledrejection", event => {
    console.log("Got the unhandledrejection event");
});
Promise.reject();
Look in the real browser console.

示例 preventDefault

window.addEventListener("unhandledrejection", event => {
    console.log("Got the unhandledrejection event");
    event.preventDefault();
});
Promise.reject();
Look in the real browser console.