-
-
Notifications
You must be signed in to change notification settings - Fork 202
Expand file tree
/
Copy pathqueue.ts
More file actions
31 lines (23 loc) · 644 Bytes
/
queue.ts
File metadata and controls
31 lines (23 loc) · 644 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import { IQueue } from "./declarations";
export class Queue<T> implements IQueue<T> {
private promiseResolve: (value?: void | PromiseLike<void>) => void;
public constructor(private items?: T[]) {
this.items = this.items === undefined ? [] : this.items;
}
public enqueue(item: T): void {
this.items.unshift(item);
if (this.promiseResolve) {
this.promiseResolve();
}
}
public async dequeue(): Promise<T> {
if (!this.items.length) {
const promise = new Promise<void>((resolve, reject) => {
this.promiseResolve = resolve;
});
await promise;
this.promiseResolve = null;
}
return this.items.pop();
}
}