
正确触发rejectionhandled事件的技巧
rejectionhandled 事件在 Promise 被拒绝,且没有 catch 块捕获时触发。要成功触发此事件,请注意以下关键点:
异步环境:事件必须在宏任务(例如 setTimeout 或 setInterval)执行完毕后触发,同步代码或微任务(Promise.then)中无法触发。未被捕获的拒绝:Promise 必须处于拒绝状态,且没有使用 catch 方法处理该拒绝。
常见错误及排查
根据经验,以下情况容易导致 rejectionhandled 事件无法触发:
在浏览器控制台中直接执行代码:控制台环境与实际运行环境不同,无法可靠地触发该事件。在同步代码或微任务中触发:必须在宏任务执行完成后才能触发。使用了 catch 块:catch 块会捕获 Promise 的拒绝,阻止 rejectionhandled 事件的触发。
示例代码:演示如何正确触发事件
以下代码演示了在满足所有条件的情况下,如何正确触发 rejectionhandled 事件:
const myPromise = new Promise((resolve, reject) => { setTimeout(() => { reject(new Error("Promise Rejected!")); }, 200); // 使用setTimeout确保异步执行});window.addEventListener('rejectionhandled', (event) => { console.log('Rejection Handled:', event.reason); // 输出错误信息});// 故意不使用catch,让Promise拒绝不被捕获setTimeout(() => { myPromise.then(result => console.log("Promise resolved:", result));}, 100); // 确保在Promise拒绝后才执行
在这个例子中,rejectionhandled 事件会在 200 毫秒后触发,因为 Promise 被拒绝且没有被 catch 处理。 setTimeout 的使用确保了事件在宏任务环境下触发。
以上就是如何正确触发RejectionHandled事件?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1561582.html
微信扫一扫
支付宝扫一扫