正确触发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事件?的详细内容,更多请关注知识资源分享宝库其它相关文章!
版权声明
本站内容来源于互联网搬运,
仅限用于小范围内传播学习,请在下载后24小时内删除,
如果有侵权内容、不妥之处,请第一时间联系我们删除。敬请谅解!
E-mail:dpw1001@163.com
发表评论