Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

async.queue() วิธีการใน Node.js


โมดูล 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 !