Skip to content
This repository was archived by the owner on Jan 14, 2022. It is now read-only.

Commit 4303076

Browse files

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

lib/promiseQueue.js

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
export class PromiseQueue {
2+
static queue = [];
3+
static pending = false;
4+
static stop = false;
5+
6+
static enqueue(promise) {
7+
return new Promise((resolve, reject) => {
8+
this.queue.push({
9+
promise,
10+
resolve,
11+
reject,
12+
});
13+
this.dequeue();
14+
});
15+
}
16+
17+
static dequeue() {
18+
if (this.workingOnPromise) {
19+
return false;
20+
}
21+
if (this.stop) {
22+
this.queue = [];
23+
this.stop = false;
24+
return;
25+
}
26+
const item = this.queue.shift();
27+
if (!item) {
28+
return false;
29+
}
30+
try {
31+
this.workingOnPromise = true;
32+
item.promise()
33+
.then((value) => {
34+
this.workingOnPromise = false;
35+
item.resolve(value);
36+
this.dequeue();
37+
})
38+
.catch(err => {
39+
this.workingOnPromise = false;
40+
item.reject(err);
41+
this.dequeue();
42+
})
43+
} catch (err) {
44+
this.workingOnPromise = false;
45+
item.reject(err);
46+
this.dequeue();
47+
}
48+
return true;
49+
}
50+
}

0 commit comments

Comments
 (0)