その後、それらを使用しないでください。以下に示すように、引き続きクエリを直接実行できます。
これは完全に間違ったアプローチではありません。他の人が実装したものをはるかに簡単に使用できるように作成しようとしているため、非常に厄介なアプローチです。その結果、メモリリークなど、多くの問題を引き起こす可能性のある多くの間違いを犯しています。
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);
});
}