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

使用async/await函数时出现Unhandled Promise Rejections弃用警告如何解决?

解决Async/Await中的Unhandled Promise Rejections弃用警告

嘿,我来帮你搞定这个烦人的弃用警告!你碰到的Unhandled promise rejections are deprecated提示,说白了就是有Promise被拒绝了但没人管——要么是async函数内部抛出了异常却没被catch捕获,要么是某个Promise的reject状态没通过.catch()处理。

看你给出的publish函数代码,目前只写了try块,明显缺少错误处理逻辑,这就是警告的根源。下面给你两种靠谱的解决方式:

方式1:给async函数补全try/catch/finally逻辑

我们可以在函数内部完整捕获可能出现的错误,同时还能在最后统一处理连接的关闭(避免资源泄漏):

export const publish = async (exchange, type, message) => {
  let connection; // 提前声明连接变量,方便在catch/finally里访问
  try {
    connection = await amqplib.connect(connectionString);
    const channel = await connection.createChannel();
    await channel.assertExchange(exchange, config.messageQueue.exchange.type);
    // 这里补上你的消息发布逻辑,比如:
    // channel.publish(exchange, routingKey, Buffer.from(message));
  } catch (error) {
    // 在这里处理错误,比如打日志、上报监控
    console.error('消息发布失败:', error);
    // 如果需要让上层调用者处理错误,可以重新抛出,但上层必须也要有catch
    // throw error;
  } finally {
    // 不管成功还是失败,只要连接已建立就关闭它
    if (connection) {
      await connection.close();
    }
  }
};

方式2:调用async函数时添加.catch()处理

如果不想在publish函数内部处理错误,那调用这个函数的时候必须加上.catch()来兜底:

// 调用publish的地方
publish('your-exchange', 'direct', 'hello-world-message')
  .catch(error => console.error('处理发布错误:', error));

额外提示

Node.js现在已经把未处理的Promise拒绝当作严重问题,未来版本甚至可能直接终止进程,所以千万不能忽略错误处理——要么用try/catch包裹await代码,要么给返回的Promise加.catch(),二者选其一就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:02:54