From 9f74c550927671f4ded301d0cf3e9d592716375c Mon Sep 17 00:00:00 2001 From: piotrruss Date: Sun, 22 Aug 2021 14:33:54 +0200 Subject: settings --- helpers/queue.js | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 helpers/queue.js (limited to 'helpers/queue.js') 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 -- cgit v1.2.3