Entonces no los uses. Todavía puede ejecutar consultas directamente, como se muestra a continuación.
No es un enfoque completamente incorrecto, es simplemente muy incómodo, ya que está tratando de crear algo que otros implementaron para un uso mucho más fácil. Como resultado, está cometiendo muchos errores que pueden generar muchos problemas, incluidas pérdidas de memoria.
Compare con la simplicidad del mismo ejemplo exacto que usa pg-promise :
var pgp = require('pg-promise')();
var conString = "postgres://username:[email protected]/database";
var db = pgp(conString);
function getJobs() {
return db.tx(function (t) {
return t.func('get_jobs');
});
}
function poll() {
getJobs()
.then(function (jobs) {
// process the jobs
})
.catch(function (error) {
// error
});
setTimeout(poll, 55);
}
poll(); // start polling
Se vuelve aún más simple cuando se usa la sintaxis de ES6:
var pgp = require('pg-promise')();
var conString = "postgres://username:[email protected]/database";
var db = pgp(conString);
function poll() {
db.tx(t=>t.func('get_jobs'))
.then(jobs=> {
// process the jobs
})
.catch(error=> {
// error
});
setTimeout(poll, 55);
}
poll(); // start polling
Lo único que no entendí bien en su ejemplo:el uso de una transacción para ejecutar un solo SELECT
. Esto no es para lo que generalmente son las transacciones, ya que no está cambiando ningún dato. Asumo que estabas tratando de encoger un código real que tenías y que también cambia algunos datos.
En caso de que no necesite una transacción, su código puede reducirse aún más a:
var pgp = require('pg-promise')();
var conString = "postgres://username:[email protected]/database";
var db = pgp(conString);
function poll() {
db.func('get_jobs')
.then(jobs=> {
// process the jobs
})
.catch(error=> {
// error
});
setTimeout(poll, 55);
}
poll(); // start polling
ACTUALIZAR
Sin embargo, sería un enfoque peligroso no controlar el final de la solicitud anterior, lo que también puede crear problemas de memoria/conexión.
Un enfoque seguro debe ser:
function poll() {
db.tx(t=>t.func('get_jobs'))
.then(jobs=> {
// process the jobs
setTimeout(poll, 55);
})
.catch(error=> {
// error
setTimeout(poll, 55);
});
}