aboutsummaryrefslogtreecommitdiffstats
path: root/helpers/queue.js
diff options
context:
space:
mode:
Diffstat (limited to 'helpers/queue.js')
-rw-r--r--helpers/queue.js53
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