Created
November 14, 2021 17:03
-
-
Save prashanta/06c493af2a7a747a140972d4454dbf10 to your computer and use it in GitHub Desktop.
Prgram to test async.queue usage
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Prgram to test async.queue usage | |
* - gerenates tasks at the rate of "taskGenRate" | |
* - tasks are proocessed at the rate of "taskProcessRate" | |
* - process is paused when queue size reaches "maxQueueSize" | |
*/ | |
const async = require('async'); | |
let i = 0; | |
let paused = false; | |
const maxQueueSize = 20; | |
const taskGenRate = 100; | |
const taskProcessRate = 1000; | |
const q = async.queue((task, cb) => { | |
serviceTask(task) | |
.then(cb); | |
}, 2); | |
q.drain(() => { | |
let ts = new Date(); | |
ts = ts.toISOString(); | |
console.log(`${ts} : ### Queue Drained`); | |
if (paused) { | |
console.log(`${ts} : ### Resume`); | |
paused = false; | |
} | |
}); | |
// Generate tasks at regular interval | |
setInterval(() => { | |
if (!paused) { | |
i++; | |
const task = { | |
index: i, | |
a: Math.floor(Math.random() * 10), | |
}; | |
let ts = new Date(); | |
ts = ts.toISOString(); | |
console.log(`${ts} : + ADDING task ${JSON.stringify(task)}`); | |
q.push(task); | |
console.log(`${ts} : queue length: ${q.length()}`); | |
if (q.length() >= maxQueueSize) { | |
console.log(`${ts} : ### Pause`); | |
paused = true; | |
} | |
} | |
}, taskGenRate); | |
const serviceTask = (task) => { | |
return new Promise((resolve, reject) => { | |
setTimeout(() => { | |
let ts = new Date(); | |
ts = ts.toISOString(); | |
console.log(`${ts} : > RUNNING task ${JSON.stringify(task)}`); | |
resolve(); | |
}, taskProcessRate); | |
}); | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment