ভূমিকা
async মডিউল Node.js অ্যাপ্লিকেশনে অ্যাসিংক্রোনাস জাভাস্ক্রিপ্টের সাথে কাজ করার জন্য বিভিন্ন ফাংশনালিটি দেয়। async.queue() মেথড একটি কিউ রিটার্ন করে যা কনকারেন্ট প্রসেসিংয়ের জন্য ব্যবহৃত হয় (একসাথে একাধিক আইটেম প্রসেস করা)।
async.queue() ইনস্টল ও ব্যবহার
Step 1 — নিচের কমান্ড দিয়ে node package manager ইনিশিয়ালাইজ করুন:
npm init
Step 2 — async মডিউল ইনস্টল করুন:
npm install --save async
Step 3 — প্রোগ্রামে async মডিউল ইম্পোর্ট করুন:
const async = require('async')সিনট্যাক্স
async.queue('function', 'concurrency value')প্যারামিটার
function — কিউ-তে অ্যাড করা এলিমেন্টের ওপর এক্সিকিউট হওয়া ফাংশন।
concurrency value — একবারে কতগুলো এলিমেন্ট প্রসেস হবে সেটি।
async.queue() মেথডের আরও কিছু মেথড ও প্রোপার্টি রয়েছে যা অ্যাসিংক রিকোয়েস্ট প্রসেসিংয়ে ব্যবহৃত হয়।
push(element, callback) — সাধারণ কিউর মতো এলিমেন্ট কিউর টেইলে অ্যাড করে।
queue.push(item, callback);
length() — কিউতে থাকা এলিমেন্টের সংখ্যা রিটার্ন করে।
queue.length()
started property — কিউ প্রসেসিং শুরু করেছে কিনা তা বুলিয়ান ভ্যালুতে জানায়।
queue.started()
unshift(element, callback) — push()-এর মতোই এলিমেন্ট অ্যাড করে, কিন্তু হেডে অ্যাড করে (প্রায়োরিটি এলিমেন্টের জন্য)।
queue.unshift(item, callback)
drain() Method — কিউ সব টাস্ক এক্সিকিউট করলে কলব্যাক ইস্যু করে। অ্যারো ফাংশনে লিখতে হয়।
queue.drain(() => { console.log("All Tasks are completely executed..."); }pause() Method — কিউর বাকি এলিমেন্টের এক্সিকিউশন হোল্ড করে। resume() কল হলে চালু হয়।
queue.pause()
resume() Method — pause() দিয়ে হোল্ড করা এলিমেন্টের এক্সিকিউশন রিজিউম করে।
queue.resume()
kill() Method — কিউর বাকি সব এলিমেন্ট মুছে ফেলে এবং আইডল স্টেটে ফেলে।
queue.kill()
idle() Method — কিউ আইডল কিনা বা কিছু প্রসেস করছে সেটি বুলিয়ানে রিটার্ন করে।
queue.idle
উদাহরণ
// Including the async module const async = require('async'); // Creating an array for all elements execution const tasks = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; // Initializing the queue const queue = async.queue((task, executed) => { console.log("Currently Busy Processing Task " + task); setTimeout(()=>{ // Number of tasks remaining and to be processed const tasksRemaining = queue.length(); executed(null, {task, tasksRemaining}); }, 1000); }, 1); // concurrency value = 1 // Queue is idle initially as no elements are there... console.log(`Queue Started ? ${queue.started}`) // Adding each task from the tasks list tasks.forEach((task)=>{ // Adding the task 5 to the head for priority execution 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`); } }) } 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`); } }) } }); // Executes the callback when the queue is done processing all the tasks queue.drain(() => { console.log('All items are succesfully processed !'); }) // Checking if the queue is started after adding tasks 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 !