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

为何添加.catch()后仍出现Uncaught (in promise) Error?

为何添加.catch()后仍出现Uncaught (in promise) Error?

嗨,我来帮你理清这个问题~

你遇到的这个问题,根源在于代码里的promise.then(()=>console.log("then"))这一行,咱们一步步拆解:

  1. 首先,errorFunc()返回的是一个会reject的Promise,也就是你定义的promise变量。
  2. 当你调用promise.then(...)时,这个then方法会返回一个全新的Promise。因为原始promise是rejected状态,then里的回调根本不会执行,反而会让这个新Promise继承原始Promise的错误,变成rejected状态。
  3. 关键来了:你完全没有处理这个then返回的新Promise的错误,所以它就变成了“漏网之鱼”,导致控制台出现Uncaught (in promise) Error。

而你看到的catch和promise all catch日志,是另外两个独立的错误处理在工作:

  • promise.catch(...)捕获了原始Promise的错误,打印出"catch"
  • Promise.all(promises).catch(...)因为数组里的原始Promise是rejected的,所以捕获了Promise.all的错误,打印出"promise all catch"

但这两个处理都管不到promise.then(...)生成的那个新Promise的错误,所以才会出现未捕获的提示。

修复方案

有两种简单的方式可以解决这个问题:

方式一:链式调用then和catch

把then和catch串起来,这样then返回的Promise的错误会被后面的catch统一处理:

const promise = errorFunc();
// 链式调用,then返回的Promise的错误会被后续catch捕获
promise.then(()=>console.log("then")).catch(()=> console.log("catch"))
promises.push(promise)

方式二:移除无用的then调用

因为原始Promise是rejected的,then里的回调根本不会执行,所以如果不需要这个回调,直接删掉这一行就好了:

const promise = errorFunc();
promise.catch(()=> console.log("catch"))
promises.push(promise)

这样修改后,就不会再出现未捕获的Promise错误啦~

备注:内容来源于stack exchange,提问作者Illia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 10:27:57