You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
33 lines
565 B
33 lines
565 B
'use strict'; |
|
|
|
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(); |
|
}); |
|
} |
|
};
|
|
|