绑定方式

  • 其一
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()
    

    绑定 unhandledrejection 事件,处理未显式捕获的Promise异常_前端
    捕获成功,但是仍然默认有报错提示,使用如下手段进行阻止默认行为

    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异常_javascript_02

注意事项

  • 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')
    

    绑定 unhandledrejection 事件,处理未显式捕获的Promise异常_javascript_03