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

如何解决Node.js中UnhandledPromiseRejectionWarning报错问题

问题原因

你的代码核心问题出在最外层自执行异步函数(IIFE)的错误处理逻辑:

  • 所有async函数运行时如果抛出错误,都会返回一个状态为rejected的Promise
  • 你在IIFE的catch块中捕获到错误后执行了throw err,相当于让这个IIFE本身返回的Promise变成了rejected状态
  • 你没有对这个IIFE返回的Promise做任何捕获处理,所以触发了Node.js的未处理Promise拒绝警告

你之前编写的三层async函数(testRepository、testService、testController)逻辑完全符合Promise规则,层层await+捕获重抛的写法可以让错误沿着调用链正常冒泡,问题只出在最外层的最终错误处理环节。

修复方案

两种可选方案:

方案1:最外层捕获后直接处理错误,不重新抛出

(async () => {
    try {
        console.log(await testController());
    } catch (err) {
        // 直接执行错误处理逻辑,比如打印错误日志,不需要重新抛出
        console.error('捕获到错误:', err);
    }
})();

方案2:给自执行异步函数追加catch处理

如果你确实需要在IIFE的catch块中重抛错误,可以给IIFE返回的Promise追加catch处理:

(async () => {
    try {
        console.log(await testController());
    } catch (err) {
        throw err;
    }
})().catch(err => {
    // 处理IIFE抛出的错误
    console.error('捕获到错误:', err);
});

内容的提问来源于stack exchange,提问作者Eurydice

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 06:54:01