Pak je nepoužívejte. Stále můžete provádět dotazy přímo, jak je uvedeno níže.
Není to úplně špatný přístup, je to jen velmi nešikovný, protože se snažíte vytvořit něco, co bylo implementováno ostatními pro mnohem jednodušší použití. V důsledku toho děláte mnoho chyb, které mohou vést k mnoha problémům, včetně úniků paměti.
Porovnejte s jednoduchostí úplně stejného příkladu, který používá 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
Je to ještě jednodušší při použití syntaxe 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
Jediná věc, kterou jsem na vašem příkladu úplně nepochopil - použití transakce k provedení jednoho SELECT
. K tomu transakce obecně neslouží, protože neměníte žádná data. Předpokládám, že jste se snažili zmenšit skutečný kus kódu, který jste měli a který také mění některá data.
V případě, že transakci nepotřebujete, může být váš kód dále snížen na:
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
AKTUALIZACE
Bylo by však nebezpečné nekontrolovat konec předchozího požadavku, což také může způsobit problémy s pamětí/připojením.
Bezpečný přístup by měl být:
function poll() {
db.tx(t=>t.func('get_jobs'))
.then(jobs=> {
// process the jobs
setTimeout(poll, 55);
})
.catch(error=> {
// error
setTimeout(poll, 55);
});
}