| Server IP : 13.235.167.51 / Your IP : 216.73.217.116 Web Server : Apache System : Linux machinox-server 6.17.0-1013-aws #13~24.04.1-Ubuntu SMP Fri Apr 24 21:36:58 UTC 2026 aarch64 User : root ( 0) PHP Version : 8.2.29 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /var/www/control.machinox.in/node_modules/next/dist/esm/client/components/ |
Upload File : |
/*
This is a simple promise queue that allows you to limit the number of concurrent promises
that are running at any given time. It's used to limit the number of concurrent
prefetch requests that are being made to the server but could be used for other
things as well.
*/ export class PromiseQueue {
#maxConcurrency;
#runningCount;
#queue;
constructor(maxConcurrency = 5){
this.#maxConcurrency = maxConcurrency;
this.#runningCount = 0;
this.#queue = [];
}
enqueue(promiseFn) {
let taskResolve;
let taskReject;
const taskPromise = new Promise((resolve, reject)=>{
taskResolve = resolve;
taskReject = reject;
});
const task = async ()=>{
try {
this.#runningCount++;
const result = await promiseFn();
taskResolve(result);
} catch (error) {
taskReject(error);
} finally{
this.#runningCount--;
this.#processNext();
}
};
const enqueueResult = {
promiseFn: taskPromise,
task
};
// wonder if we should take a LIFO approach here
this.#queue.push(enqueueResult);
this.#processNext();
return taskPromise;
}
bump(promiseFn) {
const index = this.#queue.findIndex((item)=>item.promiseFn === promiseFn);
if (index > -1) {
const bumpedItem = this.#queue.splice(index, 1)[0];
this.#queue.unshift(bumpedItem);
this.#processNext(true);
}
}
#processNext(forced = false) {
if ((this.#runningCount < this.#maxConcurrency || forced) && this.#queue.length > 0) {
this.#queue.shift()?.task();
}
}
}
//# sourceMappingURL=promise-queue.js.map