SweetAlert2 v10切换弹窗时await后续代码不执行问题排查
SweetAlert2 v10与v11弹窗切换时Promise行为差异原因分析
核心差异源于版本间的Promise触发逻辑调整
- v10版本中,每个弹窗的Promise仅在该弹窗被主动关闭(比如调用
Swal.close()、点击弹窗关闭按钮、点击遮罩层等)时才会resolve。直接打开新弹窗并不会触发旧弹窗的关闭事件,因此旧弹窗对应的await Swal.fire()会一直处于等待状态,后续代码无法执行。 - v11版本重构了弹窗管理机制,将“被新弹窗替换”纳入了旧弹窗的关闭触发条件。此时打开新弹窗时,旧弹窗的Promise会自动resolve为
{ isDismissed: true },await之后的代码就能正常执行,完全符合文档描述的行为。
- v10版本中,每个弹窗的Promise仅在该弹窗被主动关闭(比如调用
v10的临时解决方案
如果在v10中需要实现类似v11的效果,必须在打开新弹窗前手动调用Swal.close(),手动触发旧弹窗Promise的resolve,这样后续代码才能继续执行。
内容的提问来源于stack exchange,提问作者MohammadMehdi.Takalloo
相关产品推荐
相关产品推荐

