使用pg
模块和客户端池,我需要调用done()
方法,以便将客户端返回到客户端池。
连接到服务器后,我添加了SQL查询客户端的查询队列,并开始在行事件中逐行异步处理结果:
// Execute SQL query
var query = client.query("SELECT * FROM categories");
// Handle every row asynchronously
query.on('row', handleRow );
何时应该拨打done()
方法?
收到end
事件并处理完所有行后我应该调用它吗?或者在我将SQL查询添加到客户端的查询队列后立即调用它?
答案 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();
});