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

本文介绍了如何绑定JavaScript中的unhandledrejection事件来处理未显式捕获的Promise异常。通过绑定该事件,可以捕获到那些没有被 catch 块处理的Promise错误,并提供了测试案例及注意事项,强调只能捕获未显式处理的异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

绑定方式

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

    在这里插入图片描述
    捕获成功,但是仍然默认有报错提示,使用如下手段进行阻止默认行为

    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异常,如下

    // 能触发 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')
    

    在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tanleiDD

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值