使用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
相关产品推荐
相关产品推荐

