5

我有以下使用 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。我通过检查它的返回值证明了这一点。

非常感谢!

4

1 回答 1

3

我知道这是 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();
});
于 2014-08-21T02:35:49.567 回答