You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:21:47