make a new package for helpers
This commit is contained in:
25
packages/helpers/async-queue.ts
Normal file
25
packages/helpers/async-queue.ts
Normal file
@@ -0,0 +1,25 @@
|
||||
export type AsyncCallback = () => unknown
|
||||
|
||||
export class AsyncQueue {
|
||||
private callbacks: AsyncCallback[] = []
|
||||
private promise: Promise<void> | undefined
|
||||
|
||||
async add(callback: AsyncCallback) {
|
||||
this.callbacks.push(callback)
|
||||
if (this.promise) return this.promise
|
||||
|
||||
this.promise = this.runQueue()
|
||||
try {
|
||||
await this.promise
|
||||
} finally {
|
||||
this.promise = undefined
|
||||
}
|
||||
}
|
||||
|
||||
private async runQueue() {
|
||||
let callback: AsyncCallback | undefined
|
||||
while ((callback = this.callbacks.shift())) {
|
||||
await callback()
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user