Sau đó, không sử dụng chúng. Bạn vẫn có thể thực hiện các truy vấn trực tiếp, như được hiển thị bên dưới.
Đó không phải là một cách tiếp cận hoàn toàn sai, nó chỉ là một cách rất khó xử, vì bạn đang cố gắng tạo ra thứ gì đó được người khác triển khai để sử dụng dễ dàng hơn nhiều. Do đó, bạn đang mắc nhiều sai lầm có thể dẫn đến nhiều vấn đề, bao gồm cả rò rỉ bộ nhớ.
So sánh với sự đơn giản của cùng một ví dụ chính xác sử dụng 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
Thậm chí còn đơn giản hơn khi sử dụng cú pháp 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
Điều duy nhất mà tôi không hiểu rõ trong ví dụ của bạn - việc sử dụng một giao dịch để thực hiện một SELECT
duy nhất . Đây không phải là những gì giao dịch nói chung, vì bạn không thay đổi bất kỳ dữ liệu nào. Tôi giả sử rằng bạn đang cố gắng thu nhỏ một đoạn mã thực sự mà bạn có để thay đổi một số dữ liệu.
Trong trường hợp bạn không cần giao dịch, mã của bạn có thể được giảm thêm thành:
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
CẬP NHẬT
Tuy nhiên, đây sẽ là một cách tiếp cận nguy hiểm, không kiểm soát phần cuối của yêu cầu trước đó, điều này cũng có thể tạo ra các vấn đề về bộ nhớ / kết nối.
Một cách tiếp cận an toàn nên là:
function poll() {
db.tx(t=>t.func('get_jobs'))
.then(jobs=> {
// process the jobs
setTimeout(poll, 55);
})
.catch(error=> {
// error
setTimeout(poll, 55);
});
}