Node-Postgres 查询方法未调用其回调函数
Posted
技术标签:
【中文标题】Node-Postgres 查询方法未调用其回调函数【英文标题】:Node-Postgres query method not calling its callback function 【发布时间】:2013-10-18 17:25:18 【问题描述】:我有以下使用 node-postgres 的代码:
var client = new pg.Client(conString);
client.connect(function(err)
if(err)
throw new Error(console.error('could not connect to postgres '+ err));
);
client.query('select * from public.spatial_ref_sys', function(err, result)
console.log('ffdafda');
throw new Error('kokpokopko');
);
我想当这段代码执行时,'ffdafda' 会被打印到屏幕上,并且会抛出带有消息 'kokpokopko' 的错误。我什至在调试器中设置了一个永远不会中断的断点。由于这些事情永远不会发生,我假设回调永远不会被调用。
我需要某种选项来调用回调吗?我正在阅读文档,但什么也没看到。
重要的是要注意正在调用 client.query。我通过检查它的返回值证明了这一点。
非常感谢!
【问题讨论】:
我有类似的症状,原来我安装了一个旧版本的 pg,它在尝试查询时静默失败。安装 8+ 为我解决了这个问题。 【参考方案1】:我知道这已经 10 个月大了,但这只是咬我,所以我发布了解决方案。
查询的回调似乎只有在抛出错误或接收到一行时才会触发。在我的特殊情况下,我只使用过“插入”查询。我得到的结果是我的回调从未被触发(如果提供),而且“错误”和“行”事件也从未被触发。我要开火的唯一事件是“结束”。我建议以下解决方案:
pg.connect(conString, function(err, client, done)
if(err)
return console.error('error fetching client from pool', err);
var q = client.query("INSERT INTO wddata (id, type, word) VALUES('456','n','a value')", function(err, result)
//this callback never fires for some queries
if(err)
return console.error('error running query', err);
console.log(result.rows[0].number);
);
q.on('end', function()
//This event callback always fires
console.log('Finished with query');
);
done();
);
【讨论】:
以上是关于Node-Postgres 查询方法未调用其回调函数的主要内容,如果未能解决你的问题,请参考以下文章
使用 node-postgres 查询的 Promise 总是返回 undefined
设计一个函数,它接受不定数量的参数,这是参数都是函数。这些函数都接受一个回调函数作为参数,按照回调函数被调用的顺序返回函数名