node.js, модуль pg и метод done()
С использованием 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 ответа
Исходя из примера на странице этого проекта ( https://github.com/brianc/node-pg-query-stream), я бы порекомендовал назвать его, когда вы получите end
событие.
Это имеет смысл, потому что вы не done
с этим, пока вы не получили последний ряд. Если кто-то получит такое же соединение и попытается его использовать, это может привести к странным ошибкам.
Первое имеет смысл: вы захотите вызвать его, как только узнаете, что обработали все строки для своего запроса.
// 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();
});