@maximai/maxim-js
Version:
Maxim AI JS SDK. Visit https://getmaxim.ai for more info.
56 lines • 1.48 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.AsyncQueue = void 0;
/**
* AsyncQueue - Ensures handlers are processed sequentially to prevent race conditions.
* Each queued task is executed only after the previous one completes.
*/
class AsyncQueue {
constructor() {
this.queue = [];
this.processing = false;
}
/**
* Enqueue a task to be executed sequentially.
* @param task - An async function to be executed
*/
enqueue(task) {
this.queue.push(task);
this.processQueue();
}
/**
* Process the queue sequentially.
*/
async processQueue() {
if (this.processing) {
return;
}
this.processing = true;
while (this.queue.length > 0) {
const task = this.queue.shift();
if (task) {
try {
await task();
}
catch (e) {
console.warn(`[MaximSDK][AsyncQueue] Error processing task: ${e}`);
}
}
}
this.processing = false;
}
/**
* Check if the queue is currently empty and not processing.
*/
get isIdle() {
return !this.processing && this.queue.length === 0;
}
/**
* Get the current queue length.
*/
get length() {
return this.queue.length;
}
}
exports.AsyncQueue = AsyncQueue;
//# sourceMappingURL=queue.js.map