Last active
May 15, 2020 20:30
-
-
Save prashanta/542c2ca7ae25b1d23ddd7ceec10bc305 to your computer and use it in GitHub Desktop.
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); | |
}, 1); | |
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