โมดูล async มอบฟังก์ชันสำหรับจัดการ asynchronous JavaScript ใน Node.js เมธอด async.queue() คืนค่า queue สำหรับประมวลผลงานแบบ concurrent (หลายงานพร้อมกัน)
การติดตั้งและใช้งาน
npm initnpm install --save asyncconst async = require('async')
ไวยากรณ์
async.queue('function', 'concurrency value')
พารามิเตอร์
- function – ฟังก์ชันที่จะรันกับแต่ละงานใน queue
- concurrency value – จำนวนงานที่ประมวลผลพร้อมกัน
เมธอดและพร็อพเพอร์ตีของ Queue
push(element, callback)– เพิ่มงานที่ท้าย queuelength()– จำนวนงานใน queuestarted– boolean ว่า queue เริ่มทำงานแล้วหรือยังunshift(element, callback)– เพิ่มงานที่หัว queue (priority)drain(() => { ... })– callback เมื่อ queue ว่าง (ทำงานครบทุกงาน)pause()– หยุดการประมวลผลชั่วคราวresume()– เริ่มทำงานต่อหลัง pausekill()– ล้างงานทั้งหมดและทำให้ queue idleidle()– 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!