Тогава не ги използвайте. Все още можете да изпълнявате заявки директно, както е показано по-долу.
Това не е напълно грешен подход, просто е много неудобен, тъй като се опитвате да създадете нещо, което е внедрено от други за много по-лесна употреба. В резултат на това правите много грешки, които могат да доведат до много проблеми, включително изтичане на памет.
Сравнете с простотата на точно същия пример, който използва 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
Става още по-просто, когато се използва синтаксис на 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
Единственото нещо, което не разбрах съвсем във вашия пример - използването на транзакция за изпълнение на един SELECT
. Транзакциите обикновено не са за това, тъй като не променяте никакви данни. Предполагам, че сте се опитвали да свиете истинска част от кода, който сте имали, който също променя някои данни.
В случай, че не се нуждаете от транзакция, вашият код може да бъде намален допълнително до:
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
АКТУАЛИЗАЦИЯ
Би било опасен подход обаче да не се контролира краят на предишната заявка, което също може да създаде проблеми с паметта/връзката.
Безопасен подход трябва да бъде:
function poll() {
db.tx(t=>t.func('get_jobs'))
.then(jobs=> {
// process the jobs
setTimeout(poll, 55);
})
.catch(error=> {
// error
setTimeout(poll, 55);
});
}