Maka jangan gunakan mereka. Anda masih dapat menjalankan kueri secara langsung, seperti yang ditunjukkan di bawah ini.
Ini bukan pendekatan yang sepenuhnya salah, ini hanya pendekatan yang sangat canggung, karena Anda mencoba membuat sesuatu yang telah diterapkan oleh orang lain untuk penggunaan yang jauh lebih mudah. Akibatnya, Anda membuat banyak kesalahan yang dapat menyebabkan banyak masalah, termasuk kebocoran memori.
Bandingkan dengan kesederhanaan contoh yang sama persis yang menggunakan 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
Menjadi lebih sederhana saat menggunakan sintaks 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
Satu-satunya hal yang saya tidak begitu mengerti dalam contoh Anda - penggunaan transaksi untuk mengeksekusi satu SELECT
. Ini bukan tujuan transaksi pada umumnya, karena Anda tidak mengubah data apa pun. Saya berasumsi Anda mencoba mengecilkan bagian kode asli yang Anda miliki yang juga mengubah beberapa data.
Jika Anda tidak memerlukan transaksi, kode Anda dapat dikurangi lebih lanjut menjadi:
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
PERBARUI
Namun, akan menjadi pendekatan yang berbahaya jika tidak mengontrol akhir dari permintaan sebelumnya, yang juga dapat menimbulkan masalah memori/koneksi.
Pendekatan yang aman harus:
function poll() {
db.tx(t=>t.func('get_jobs'))
.then(jobs=> {
// process the jobs
setTimeout(poll, 55);
})
.catch(error=> {
// error
setTimeout(poll, 55);
});
}