Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

เมธอด async.queue() ใน Node.js

โมดูล async มอบฟังก์ชันสำหรับจัดการ asynchronous JavaScript ใน Node.js เมธอด async.queue() คืนค่า queue สำหรับประมวลผลงานแบบ concurrent (หลายงานพร้อมกัน)

การติดตั้งและใช้งาน

  1. npm init
  2. npm install --save async
  3. const async = require('async')

ไวยากรณ์

async.queue('function', 'concurrency value')

พารามิเตอร์

  • function – ฟังก์ชันที่จะรันกับแต่ละงานใน queue
  • concurrency value – จำนวนงานที่ประมวลผลพร้อมกัน

เมธอดและพร็อพเพอร์ตีของ Queue

  • push(element, callback) – เพิ่มงานที่ท้าย queue
  • length() – จำนวนงานใน queue
  • started – boolean ว่า queue เริ่มทำงานแล้วหรือยัง
  • unshift(element, callback) – เพิ่มงานที่หัว queue (priority)
  • drain(() => { ... }) – callback เมื่อ queue ว่าง (ทำงานครบทุกงาน)
  • pause() – หยุดการประมวลผลชั่วคราว
  • resume() – เริ่มทำงานต่อหลัง pause
  • kill() – ล้างงานทั้งหมดและทำให้ queue idle
  • idle() – boolean ว่า queue ว่างหรือกำลังทำงาน

ตัวอย่างสมบูรณ์

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 = 1

console.log(`Queue Started? ${queue.started}`);

tasks.forEach((task) => {
  if (task == 5) {
    queue.unshift(task, (error, { task, tasksRemaining }) => {
      if (error) console.log(`Error processing task ${task}`);
      else console.log(`Finished task ${task}. ${tasksRemaining} remaining`);
    });
  } else {
    queue.push(task, (error, { task, tasksRemaining }) => {
      if (error) console.log(`Error processing task ${task}`);
      else console.log(`Finished task ${task}. ${tasksRemaining} remaining`);
    });
  }
});

queue.drain(() => {
  console.log('All items are successfully processed!');
});

console.log(`Queue Started? ${queue.started}`);

ผลลัพธ์

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 10
Finished processing task 10. 0 tasks remaining
All items are successfully processed!