使用SweetAlert2通知时出现Uncaught (in promise): timer错误求助
解决SweetAlert2中
Uncaught (in promise): timer错误 这个问题我之前也碰到过,其实核心原因是SweetAlert2对自动关闭弹窗的Promise处理逻辑:当弹窗通过timer自动关闭时,它返回的Promise会被拒绝(reject),而你的代码只通过.then()处理了Promise成功(resolve)的情况,完全没管拒绝的情况,所以控制台就抛出了未捕获的Promise错误。
快速解决方案:添加.catch()捕获拒绝
只需要在你的代码后面加上.catch()方法,专门处理timer导致的拒绝即可,示例代码如下:
swal({ text: "Your data is being saved", showConfirmButton: false, timer: 1000 }).then(function () { // 这里是用户主动点击确认按钮时的逻辑(不过你隐藏了确认按钮,所以这个回调大概率不会触发) }).catch(function (reason) { // 捕获timer导致的拒绝,reason的值就是'timer' if (reason === 'timer') { // 可以在这里写弹窗自动关闭后的逻辑,不需要的话直接return即可 return; } // 如果是其他原因导致的Promise拒绝,再做额外处理 });
进阶优化:使用最新API并简化逻辑
如果你用的是SweetAlert2的较新版本,更推荐使用Swal.fire()这个标准API,同时可以用.finally()来统一处理弹窗关闭后的逻辑(不管是确认还是自动关闭):
Swal.fire({ text: "Your data is being saved", showConfirmButton: false, timer: 1000 }).finally(function() { // 不管弹窗是怎么关闭的,都会执行这里的逻辑 console.log("弹窗已关闭"); }).catch(function(reason) { // 依然需要捕获timer的拒绝,避免控制台报错 if (reason === 'timer') return; });
补充说明
为什么SweetAlert2要把自动关闭的情况设为Promise拒绝?这是因为它把用户主动点击确认按钮视为"成功"(resolve),而自动关闭、点击取消按钮这些情况视为"取消/失败"(reject),以此区分不同的关闭触发原因。只要你处理了这些reject,控制台就不会再报错啦。
内容的提问来源于stack exchange,提问作者Gaurav_0093
相关产品推荐
相关产品推荐

