
理解rejectionhandled事件的关键在于其触发条件:一个promise被拒绝,且这个拒绝没有被任何catch语句捕获。 因此,要触发此事件,我们需要创建一个被拒绝的promise,并且不使用catch来处理它的拒绝。
你的代码中已经注册了rejectionhandled事件监听器:
window.addEventListener("rejectionhandled", event => { console.log("Promise rejected; reason: " + event.reason);}, false);
但缺少关键步骤:创建一个被拒绝的Promise。 以下代码演示如何做到这一点:
const rejectedPromise = Promise.reject("这是一个被拒绝的Promise");
rejectedPromise现在处于被拒绝状态。 因为没有catch处理它,当事件循环进入下一个宏任务阶段时,rejectionhandled事件就会被触发。
需要注意的是:
立即学习“Java免费学习笔记(深入)”;
宏任务队列: rejectionhandled事件仅在Promise进入宏任务队列后才会触发。 这意味着在同步代码或微任务(例如Promise.then)中直接拒绝的Promise不会触发该事件。
catch语句: 如果你的Promise使用了.catch()方法来处理错误,那么rejectionhandled事件就不会触发,因为错误已经被捕获了。
测试案例: 你提供的测试代码中,Promise.resolve(1).then(...)和Promise.resolve(1).then(...).catch(...)都不会触发rejectionhandled,因为它们是已完成的Promise,或者使用了catch处理了潜在的错误。 而使用setTimeout包裹的Promise,由于在宏任务队列中执行,才会触发rejectionhandled。
为了更清晰地说明,可以修改你的测试代码,使其明确地拒绝一个Promise,并且不使用catch来处理:
const rejectedPromise = Promise.reject("这是一个测试错误");setTimeout(() => { // 这里rejectedPromise在宏任务中被访问,因此rejectionhandled事件会被触发}, 100);
通过以上修改,你就能可靠地触发并观察rejectionhandled事件了。
以上就是如何触发JavaScript中的rejectionhandled事件?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1561563.html
微信扫一扫
支付宝扫一扫