Node.js中async/await正确用法咨询:两段数据库代码选哪段?
关于async/await结合PostgreSQL连接的正确用法分析
Code 2是符合async/await规范的正确写法,Code 1存在多处误用,下面具体分析:
Code 1的问题
await pool.connect(...)完全无效:pool.connect的回调版本不返回Promise,await无法等待它完成;加了async的回调函数是独立的异步函数,外层try/catch捕获不到内部抛出的错误(错误在异步回调栈中)。await client.query(...)同样无效:这里用了client.query的回调模式,该模式不返回Promise,await起不到等待查询完成的作用;同时done()的调用逻辑有风险,若query出错,done()可能无法正确执行,导致连接池泄漏。
Code 2的正确之处
- 正确使用
pool.connect()的Promise版本:通过await获取连接客户端,完全契合async/await的异步等待逻辑。 - 用await等待
client.query()的Promise结果:代码线性执行,逻辑清晰,错误能被外层try/catch正确捕获。 - finally块中调用
client.release():不管查询成功还是失败,都能确保连接被释放回连接池,避免连接耗尽,这是数据库连接池使用的最佳实践。
内容的提问来源于stack exchange,提问作者Kalaba
相关产品推荐
相关产品推荐

