โมดูล async มีฟังก์ชันการทำงานที่แตกต่างกันเพื่อทำงานกับ JavaScript แบบอะซิงโครนัสในแอปพลิเคชัน nodejs เมธอด async.queue() ส่งคืนคิวที่ใช้เพิ่มเติมสำหรับการประมวลผลพร้อมกันของกระบวนการ เช่น การประมวลผลหลายรายการพร้อมกัน/ทันที
การติดตั้งและใช้งาน async.queue()
ขั้นตอนที่ 1 − เรียกใช้คำสั่งต่อไปนี้เพื่อเริ่มต้นตัวจัดการแพ็คเกจโหนด
npm init
ขั้นตอนที่ 2 − การติดตั้งโมดูล async โดยใช้คำสั่งต่อไปนี้
npm install --save async
ขั้นตอนที่ 3 − การนำเข้าโมดูล async โดยใช้คำสั่งด้านล่างในโปรแกรมของคุณ
const async = require('async')
ไวยากรณ์
async.queue('function', 'concurrency value')
พารามิเตอร์
พารามิเตอร์ข้างต้นอธิบายไว้ด้านล่าง −
-
ฟังก์ชัน – พารามิเตอร์นี้กำหนดฟังก์ชันที่จะดำเนินการเหนือองค์ประกอบที่เพิ่มลงในคิว
-
ค่าพร้อมกัน – ช่องนี้กำหนดจำนวนองค์ประกอบที่จะประมวลผลในแต่ละครั้ง
เมธอด async.queue() ยังมีเมธอดและคุณสมบัติมากมายที่จะใช้ขณะประมวลผลคำขอ async
-
ดัน (องค์ประกอบ โทรกลับ) - คล้ายกับคิวทั่วไป วิธีพุชใช้สำหรับเพิ่มองค์ประกอบที่ส่วนท้ายของคิว
queue.push(item, callback);
-
ความยาว() - วิธีความยาวใช้สำหรับส่งคืนจำนวนองค์ประกอบที่มีอยู่ในคิวในแต่ละครั้ง
queue.length()
-
คุณสมบัติเริ่มต้น - คุณสมบัตินี้ส่งคืนค่าบูลีนโดยให้ข้อมูลเกี่ยวกับคิวไม่ว่าจะเริ่มประมวลผลองค์ประกอบหรือไม่
queue.started()
-
unshift(องค์ประกอบ โทรกลับ) - คุณสมบัติ unshift ยังเพิ่มองค์ประกอบในคิวเช่นเมธอด push() ข้อแตกต่างระหว่างสองสิ่งนี้คือ – เพิ่มองค์ประกอบที่ส่วนหัวในขณะที่การกดจะเพิ่มที่ส่วนท้าย วิธีนี้ใช้สำหรับองค์ประกอบที่มีลำดับความสำคัญ
queue.unshift(item, callback)
-
วิธีระบายน้ำ () - เมธอดนี้เรียกกลับเมื่อคิวดำเนินการงาน/องค์ประกอบทั้งหมด ใช้งานได้ก็ต่อเมื่อมีการอธิบายฟังก์ชันในฟังก์ชันลูกศรเท่านั้น
queue.drain(() => { console.log(“All Tasks are completely executed...”); }
-
วิธีการหยุดชั่วคราว () วิธีนี้จะเก็บการดำเนินการขององค์ประกอบที่เหลืออยู่ในคิว ฟังก์ชันจะทำงานต่อหลังจากเรียกใช้ resume()
queue.pause()
-
Resume() วิธีการ - วิธีนี้ใช้สำหรับการกลับมาดำเนินการขององค์ประกอบที่ถูกพักไว้โดยใช้เมธอด Pause()
queue.resume()
-
วิธีฆ่า () - เมธอดนี้จะลบองค์ประกอบที่เหลือทั้งหมดออกจากคิวและบังคับให้อยู่ในสถานะไม่ได้ใช้งาน
queue.kill()
-
เมธอด idle() - เมธอดนี้ส่งคืนสถานะบูลีนที่ระบุว่าคิวไม่ได้ใช้งานหรือกำลังประมวลผลบางอย่าง
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`); } }) // Adding all the tasks at tail to be executed except task 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`); } }) } }); // 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 !