Skip to content

Commit 41e0104

Browse files
authored
Create AsyncQueue.js
1 parent 397ca1e commit 41e0104

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

03-DataStructures/AsyncQueue.js

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
class AsyncQueue {
2+
constructor() {
3+
this.queue = [];
4+
this.pendingPromises = [];
5+
}
6+
7+
// Add an item to the queue asynchronously
8+
async enqueue(item) {
9+
if (this.pendingPromises.length) {
10+
const resolve = this.pendingPromises.shift();
11+
resolve(item);
12+
} else {
13+
this.queue.push(item);
14+
}
15+
}
16+
17+
// Remove and return an item from the queue asynchronously
18+
async dequeue() {
19+
if (this.queue.length) {
20+
return Promise.resolve(this.queue.shift());
21+
}
22+
23+
return new Promise((resolve) => {
24+
this.pendingPromises.push(resolve);
25+
});
26+
}
27+
28+
// Check if the queue is empty
29+
isEmpty() {
30+
return this.queue.length === 0;
31+
}
32+
}
33+
34+
// Example usage:
35+
(async () => {
36+
const asyncQueue = new AsyncQueue();
37+
38+
asyncQueue.enqueue(10);
39+
asyncQueue.enqueue(20);
40+
asyncQueue.enqueue(30);
41+
42+
console.log(await asyncQueue.dequeue()); // 10
43+
console.log(await asyncQueue.dequeue()); // 20
44+
45+
setTimeout(() => asyncQueue.enqueue(40), 1000);
46+
47+
console.log(await asyncQueue.dequeue()); // 30
48+
console.log(await asyncQueue.dequeue()); // 40
49+
})();
50+

0 commit comments

Comments
 (0)