Как pg-обещает обрабатывать несколько клиентов в одном приложении - PullRequest
0 голосов
/ 04 июня 2018

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

Спасибо

...