फिर उनका इस्तेमाल न करें। जैसा कि नीचे दिखाया गया है, आप अभी भी सीधे प्रश्नों को निष्पादित कर सकते हैं।
यह पूरी तरह से गलत दृष्टिकोण नहीं है, यह सिर्फ एक बहुत ही अजीब तरीका है, क्योंकि आप कुछ ऐसा बनाने की कोशिश कर रहे हैं जिसे दूसरों द्वारा बहुत आसान उपयोग के लिए लागू किया गया है। परिणामस्वरूप, आप कई गलतियाँ कर रहे हैं जो स्मृति रिसाव सहित कई समस्याओं का कारण बन सकती हैं।
ठीक उसी उदाहरण की सादगी से तुलना करें जो 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);
});
}