Gebruik ze dan niet. U kunt query's nog steeds rechtstreeks uitvoeren, zoals hieronder weergegeven.
Het is niet een totaal verkeerde benadering, het is gewoon een heel onhandige, omdat je iets probeert te creëren dat door anderen is geïmplementeerd voor een veel gemakkelijker gebruik. Als gevolg hiervan maak je veel fouten die tot veel problemen kunnen leiden, waaronder geheugenlekken.
Vergelijk met de eenvoud van exact hetzelfde voorbeeld dat gebruikmaakt van 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
Wordt nog eenvoudiger bij gebruik van de ES6-syntaxis:
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
Het enige dat ik in je voorbeeld niet helemaal begreep - het gebruik van een transactie om een enkele SELECT
uit te voeren . Daar zijn transacties over het algemeen niet voor bedoeld, aangezien u geen gegevens wijzigt. Ik neem aan dat je een echt stuk code probeerde te verkleinen dat je had en dat ook enkele gegevens verandert.
Als u geen transactie nodig heeft, kan uw code verder worden teruggebracht tot:
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
UPDATE
Het zou echter een gevaarlijke benadering zijn om het einde van het vorige verzoek niet te controleren, wat ook geheugen-/verbindingsproblemen kan veroorzaken.
Een veilige aanpak zou moeten zijn:
function poll() {
db.tx(t=>t.func('get_jobs'))
.then(jobs=> {
// process the jobs
setTimeout(poll, 55);
})
.catch(error=> {
// error
setTimeout(poll, 55);
});
}