Dann benutze sie nicht. Sie können Abfragen trotzdem direkt ausführen, wie unten gezeigt.
Es ist kein völlig falscher Ansatz, es ist nur ein sehr umständlicher, da Sie versuchen, etwas zu erstellen, das von anderen für eine viel einfachere Verwendung implementiert wurde. Infolgedessen machen Sie viele Fehler, die zu vielen Problemen führen können, einschließlich Speicherlecks.
Vergleichen Sie mit der Einfachheit des exakt gleichen Beispiels, das pg-promise verwendet :
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
Wird noch einfacher, wenn Sie die ES6-Syntax verwenden:
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
Das einzige, was ich in Ihrem Beispiel nicht ganz verstanden habe - die Verwendung einer Transaktion zum Ausführen eines einzelnen SELECT
. Dies ist im Allgemeinen nicht der Zweck von Transaktionen, da Sie keine Daten ändern. Ich nehme an, Sie haben versucht, ein echtes Stück Code zu verkleinern, das auch einige Daten ändert.
Falls Sie keine Transaktion benötigen, kann Ihr Code weiter reduziert werden auf:
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
AKTUALISIEREN
Es wäre jedoch ein gefährlicher Ansatz, das Ende der vorherigen Anfrage nicht zu kontrollieren, was ebenfalls zu Speicher-/Verbindungsproblemen führen kann.
Ein sicherer Ansatz sollte sein:
function poll() {
db.tx(t=>t.func('get_jobs'))
.then(jobs=> {
// process the jobs
setTimeout(poll, 55);
})
.catch(error=> {
// error
setTimeout(poll, 55);
});
}