; | |
module.exports = class Queue { | |
_queue = []; | |
_executing = false; | |
_jobRunner = null; | |
constructor(jobRunner) { | |
this._jobRunner = jobRunner; | |
} | |
enqueue = (...args) => { | |
this._queue.push(args); | |
this._dequeue(); | |
}; | |
destroy() { | |
this._queue.length = 0; | |
this._jobRunner = null; | |
} | |
_dequeue() { | |
if (this._executing || !this._queue.length) return; | |
this._executing = true; | |
this._jobRunner(...this._queue.shift()); | |
setTimeout(() => { | |
this._executing = false; | |
this._dequeue(); | |
}); | |
} | |
}; | |