diff options
Diffstat (limited to 'helpers/queue.js')
-rw-r--r-- | helpers/queue.js | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/helpers/queue.js b/helpers/queue.js new file mode 100644 index 0000000..69e708a --- /dev/null +++ b/helpers/queue.js @@ -0,0 +1,53 @@ +class Queue { + static queue = []; + static pendingPromise = false; + static stop = false; + + static enqueue(promise) { + return new Promise((resolve, reject) => { + this.queue.push({ + promise, + resolve, + reject + }); + this.dequeue(); + }); + } + + static dequeue() { + if (this.workingOnPromise) { + return false; + } + if (this.stop) { + this.queue = []; + this.stop = false; + return; + } + const item = this.queue.shift(); + if (!item) { + return false; + } + try { + this.workingOnPromise = true; + item + .promise() + .then((value) => { + this.workingOnPromise = false; + item.resolve(value); + this.dequeue(); + }) + .catch((err) => { + this.workingOnPromise = false; + item.reject(err); + this.dequeue(); + }); + } catch (err) { + this.workingOnPromise = false; + item.reject(err); + this.dequeue(); + } + return true; + } +} + +export default Queue |