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

Node.js使用pg库查询既无结果也不报错仅返回未决议Promise

排查优先级

  • 异步调用未处理
    你贴出的socketserver.js中,ws.on('message')的回调是同步函数,内部调用的parseMessage如果未声明为async、且调用addMessage时未加await,就会直接拿到未决议的Promise:
    异步函数不等待的情况下,内部执行逻辑完全脱离当前上下文,不仅返回值是pending状态,就算内部抛出错误、或者查询执行完成,你也无法感知到,INSERT语句不生效就是因为请求还没发往数据库,上层逻辑已经继续执行后续流程了。
    修复方案:

    1. 将parseMessage声明为async函数,调用addMessage时加await
    2. 给ws.on('message')的回调加异常捕获,避免异步错误被静默:
    ws.on('message', async (data) => {
      try {
        await parseMessage(ws, socket_id, data)
      } catch (err) {
        console.error('消息处理错误', err)
      }
    })
    
  • 全局异常规则吞错
    检查项目是否配置了全局unhandledRejection、uncaughtException监听,有没有把数据库抛出的连接错误、语法错误直接吞掉不打印日志,导致你看不到具体报错。同时确认日志输出等级,console.error的内容没有被过滤。

  • 连接池排队阻塞
    pg的Pool默认最大连接数为10,如果有其他模块长期占用连接不释放,新的查询会进入排队队列,长期处于pending状态不会返回也不报错。可调用db.query前后打印连接池状态验证:

console.log('等待队列长度', db.waitingCount)
console.log('空闲连接数', db.idleCount)
console.log('总连接数', db.totalCount)
const res = await db.query('select 1')

如果waitingCount持续大于0,就需要排查其他模块的连接泄漏问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 11:27:04