Więc ich nie używaj. Nadal możesz wykonywać zapytania bezpośrednio, jak pokazano poniżej.
Nie jest to całkowicie złe podejście, jest po prostu bardzo niezręczne, ponieważ próbujesz stworzyć coś, co zostało zaimplementowane przez innych w celu znacznie łatwiejszego użycia. W rezultacie popełniasz wiele błędów, które mogą prowadzić do wielu problemów, w tym wycieków pamięci.
Porównaj z prostotą dokładnie tego samego przykładu, w którym użyto 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
Staje się jeszcze prostsze przy użyciu składni 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
Jedyna rzecz, której nie do końca zrozumiałem w twoim przykładzie - użycie transakcji do wykonania pojedynczego SELECT
. Nie do tego zazwyczaj służą transakcje, ponieważ nie zmieniasz żadnych danych. Zakładam, że próbowałeś zmniejszyć prawdziwy fragment kodu, który również zmienia niektóre dane.
Jeśli nie potrzebujesz transakcji, Twój kod może zostać dodatkowo zredukowany do:
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
AKTUALIZUJ
Niebezpiecznym podejściem byłoby jednak niekontrolowanie końca poprzedniego żądania, co również może powodować problemy z pamięcią/połączeniem.
Bezpiecznym podejściem powinno być:
function poll() {
db.tx(t=>t.func('get_jobs'))
.then(jobs=> {
// process the jobs
setTimeout(poll, 55);
})
.catch(error=> {
// error
setTimeout(poll, 55);
});
}