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();
});
Другие вопросы по тегам