Как 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-обещанием нет необходимости иметь логику моего первого примера, и только общая функция запроса создает и обрабатывает соединения. Означает ли это, что он также автоматически обрабатывает разъединения? Пожалуйста, совет, если я делаю что-то не так или если я что-то упускаю.

Спасибо

0 ответов

Другие вопросы по тегам