विवरण
async मॉड्यूल Node.js एप्लिकेशन में एसिंक्रोनस JavaScript के साथ काम करने के लिए विभिन्न कार्यक्षमताएं प्रदान करता है। async.queue() विधि एक कतार लौटाती है जिसका उपयोग प्रक्रियाओं के समवर्ती प्रसंस्करण के लिए किया जाता है यानी एक समय/तात्कालिक में कई आइटम्स का प्रसंस्करण।
async.queue() स्थापित करना और उपयोग करना
चरण 1 - नोड पैकेज मैनेजर को इनिशियलाइज़ करने के लिए निम्न कमांड चलाएं।
npm init
चरण 2 - निम्न कमांड का उपयोग करके async मॉड्यूल स्थापित करें।
npm install --save async
चरण 3 - अपने प्रोग्राम्स में नीचे दिए गए स्टेटमेंट का उपयोग करके async मॉड्यूल आयात करें।
const async = require('async')सिंटैक्स
async.queue('function', 'concurrency value')पैरामीटर
function - यह पैरामीटर उस फ़ंक्शन को परिभाषित करता है जो कतार में जोड़े गए तत्व पर निष्पादित होगा।
concurrency value - यह फ़ील्ड एक समय में संसाधित किए जाने वाले तत्वों की संख्या को परिभाषित करता है।
async.queue() विधि में आगे कई विधियां और गुण हैं जिनका उपयोग एसिंक्रोनस अनुरोधों को संसाधित करते समय किया जाएगा।
push(element, callback) - एक सामान्य कतार के समान, push विधि का उपयोग कतार की पूंछ में एक तत्व जोड़ने के लिए किया जाता है।
queue.push(item, callback);
length() - लंबाई विधि का उपयोग एक समय में कतार में मौजूद तत्वों की संख्या लौटाने के लिए किया जाता है।
queue.length()
started प्रॉपर्टी - यह प्रॉपर्टी एक बूलियन मान लौटाती है जो कतार के बारे में जानकारी प्रदान करती है कि क्या इसने अपने तत्वों को संसाधित करना शुरू कर दिया है या नहीं।
queue.started()
unshift(element, callback) - unshift प्रॉपर्टी भी push() विधि की तरह कतार में एक तत्व जोड़ती है। दोनों के बीच एकमात्र अंतर है - यह तत्वों को सिर पर जोड़ती है जबकि push इसे पूंछ में जोड़ता है। इस विधि का उपयोग प्राथमिकता वाले तत्वों के लिए किया जाता है।
queue.unshift(item, callback)
drain() विधि - यह विधि एक कॉलबैक जारी करती है जब कतार ने सभी कार्यों/तत्वों को निष्पादित कर दिया है। यह केवल तब काम करता है जब फ़ंक्शन एक तीर फ़ंक्शन में वर्णित होता है।
queue.drain(() => { console.log("All Tasks are completely executed..."); }pause() विधि - यह विधि कतार में शेष तत्वों के निष्पादन को रोकती है। फ़ंक्शन resume() कॉल करने के बाद जारी रहेगा।
queue.pause()
resume() विधि - यह विधि pause() विधि का उपयोग करके रोके गए तत्वों के निष्पादन को फिर से शुरू करने के लिए उपयोग की जाती है।
queue.resume()
kill() विधि - यह विधि कतार से सभी शेष तत्वों को हटा देती है और इसे निष्क्रिय अवस्था में मजबूर करती है।
queue.kill()
idle() विधि - यह विधि एक बूलियन अवस्था लौटाती है जो इंगित करती है कि कतार निष्क्रिय है या कुछ संसाधित कर रही है।
queue.idle
उदाहरण
उपरोक्त अवधारणाओं को बेहतर ढंग से समझने के लिए एक उदाहरण देखते हैं:
// async मॉड्यूल शामिल करें const async = require('async'); // सभी तत्वों के निष्पादन के लिए एक सरणी बनाएं const tasks = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; // कतार इनिशियलाइज़ करें const queue = async.queue((task, executed) => { console.log("Currently Busy Processing Task " + task); setTimeout(()=>{ // शेष और संसाधित किए जाने वाले कार्यों की संख्या const tasksRemaining = queue.length(); executed(null, {task, tasksRemaining}); }, 1000); }, 1); // concurrency value = 1 // कतार प्रारंभ में निष्क्रिय है क्योंकि कोई तत्व नहीं हैं... console.log(`Queue Started ? ${queue.started}`) // कार्यों की सूची से प्रत्येक कार्य जोड़ें tasks.forEach((task)=>{ // प्राथमिकता निष्पादन के लिए कार्य 5 को सिर पर जोड़ें if(task == 5){ queue.unshift(task, (error, {task, tasksRemaining})=>{ if(error){ console.log(`An error occurred while processing task ${task}`); }else { console.log(`Finished processing task ${task}. ${tasksRemaining} tasks remaining`); } }) // कार्य 5 को छोड़कर सभी कार्यों को पूंछ पर जोड़ें } else { queue.push(task, (error, {task, tasksRemaining})=>{ if(error){ console.log(`An error occurred while processing task ${task}`); }else { console.log(`Finished processing task ${task}. ${tasksRemaining} tasks remaining`); } }) } }); // जब कतार सभी कार्यों को संसाधित कर ले तो कॉलबैक निष्पादित करें queue.drain(() => { console.log('All items are succesfully processed !'); }) // कार्यों को जोड़ने के बाद जांचें कि क्या कतार शुरू हो गई है console.log(`Queue Started ? ${queue.started}`)आउटपुट
C:\home\node>> node asyncQueue.js Queue Started ? False Queue Started ? True Currently Busy Processing Task 5 Finished processing task 5. 9 tasks remaining Currently Busy Processing Task 1 Finished processing task 1. 8 tasks remaining Currently Busy Processing Task 2 Finished processing task 2. 7 tasks remaining Currently Busy Processing Task 3 Finished processing task 3. 6 tasks remaining Currently Busy Processing Task 4 Finished processing task 4. 5 tasks remaining Currently Busy Processing Task 6 Finished processing task 6. 4 tasks remaining Currently Busy Processing Task 7 Finished processing task 7. 3 tasks remaining Currently Busy Processing Task 8 Finished processing task 8. 2 tasks remaining Currently Busy Processing Task 9 Finished processing task 9. 1 tasks remaining Currently Busy Processing Task 10 Finished processing task 10. 0 tasks remaining All items are succesfully processed !