node.js,pg模块和done()方法

时间:2014-02-01 17:09:47

标签: node.js node.js-pg

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

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

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

何时应该拨打done()方法? 收到end事件并处理完所有行后我应该调用它吗?或者在我将SQL查询添加到客户端的查询队列后立即调用它?

2 个答案:

答案 0 :(得分:1)

从此项目页面(https://github.com/brianc/node-pg-query-stream)上的示例开始,我建议您在收到end事件时调用它。

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

答案 1 :(得分: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();
});