diff options
author | 2021-08-22 14:33:54 +0200 | |
---|---|---|
committer | 2021-08-29 15:35:49 +0200 | |
commit | 9f74c550927671f4ded301d0cf3e9d592716375c (patch) | |
tree | 6075bead5939bfb9c3b6137fc5ef865f088b57cb /helpers/queue.js | |
parent | 71cc09db93ec9b079a30593e14ca57c98fdc94ac (diff) | |
download | my_apps-9f74c550927671f4ded301d0cf3e9d592716375c.tar.gz my_apps-9f74c550927671f4ded301d0cf3e9d592716375c.tar.bz2 my_apps-9f74c550927671f4ded301d0cf3e9d592716375c.zip |
settings
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 |