0

使用pg模块和客户端池,我需要调用done()方法才能将客户端返回到客户端池中。

连接到服务器后,我添加 SQL 查询客户端的查询队列,并开始在 row 事件中逐行异步处理结果:

// Execute SQL query
var query = client.query("SELECT * FROM categories");
// Handle every row asynchronously
query.on('row', handleRow );

我什么时候应该调用done()方法?我应该在收到end事件并处理所有行后调用它,还是在将 SQL 查询添加到客户端的查询队列后立即调用它?

4

2 回答 2

1

从这个项目页面(https://github.com/brianc/node-pg-query-stream)上的一个例子来看,我建议你在收到end事件时调用它。

这是有道理的,因为done在收到最后一行之前,您不会使用它。如果其他人获得相同的连接并尝试使用它,则可能会产生奇怪的错误。

于 2014-02-01T19:26:06.607 回答
1

前者是有道理的:一旦你知道你已经处理了查询的所有行,你就会想调用它。

// your DB connection info
var conString = "pg://admin:admin@localhost:5432/Example";

var pg = require("pg");
var client = new pg.Client(conString);
client.connect();

// Your own query
var query = client.query("SELECT * FROM mytable");

query.on("row", function (row, result) {
  // do your stuff with each row
  result.addRow(row);
});

query.on("end", function (result) {
  // here you have the complete result
  console.log(JSON.stringify(result.rows, null, 2));
  // end when done ;)
  client.end();
});
于 2014-12-07T14:31:09.010 回答