Как pg-обещает обрабатывать несколько клиентов в одном приложении
Я создаю код, используя только модуль pg, где у меня есть общая функция для выполнения запросов. Эта функция может создать клиента на месте, если он не принимает уже существующего клиента в качестве аргумента. Или он может использовать уже существующий клиент для выполнения запроса. Так что я могу назвать эту функцию как (псевдокод)
const {Client} = require('pg');
const clientobj = {user:...}
generalQuery(text, params, client){
if !client{client = new Client(clientobj);}
client.query(text , params)
client.end();
else
client = client
client.query(text , params)
return query results
}
call like
generalQuery(text, params, false)
or via another function that already created a client
anotherFunction(){
client = new Client(clientobj);
client.query(insert)...
do some things with the results
generalQuery(text, params, client)
do some things with the results
now client.end();
}
exports.anotherFunction= anotherFunction;
exports.generalQuery= generalQuery;
Итак, если у меня уже есть созданный клиент, мне не нужно создавать еще один в generalQuery
и я отключаю клиента только после того, как результаты будут возвращены в anotherFunction
, Плюс я могу позвонить generalQuery
"как есть" в любое время, когда я хочу, и он будет обращаться с остальным.
Как с этим справится pg-обещание? За исключением особых случаев, как правило, он не подвергает client
,
Так что я думаю, что мне нужно реорганизовать мой код и иметь общую функцию запроса, которая всегда будет обрабатывать клиентское соединение и разъединение внутри, и никогда не вызывать эту функцию с уже существующим клиентом. ПСЕВДОКОД
const pgp = require('pg-promise')();
const db = pgp(connection);
generalQuery(text, params){
db.any(text, params)//all client connection/disconnection is handled here
.then(function(data) {
// success;
})
.catch(function(error) {
// error;
});
}
call like
generalQuery(text, params)
or via another function that never has an already created client
anotherFunction(){
generalQuery(text, params)
do some things with the results
generalQuery(text, params)
do some things with the results
}
exports.anotherFunction= anotherFunction;
exports.generalQuery= generalQuery;
Таким образом, с pg-обещанием нет необходимости иметь логику моего первого примера, и только общая функция запроса создает и обрабатывает соединения. Означает ли это, что он также автоматически обрабатывает разъединения? Пожалуйста, совет, если я делаю что-то не так или если я что-то упускаю.
Спасибо