UNPKG

chronik-cache

Version:

A cache helper for chronik-client

47 lines (43 loc) 1.23 kB
// TaskQueue: Global queue to limit concurrency class TaskQueue { constructor(concurrentLimit = 2) { // 设置最大并发数 this.concurrentLimit = concurrentLimit; this.running = 0; this.queue = []; } // 将任务加入队列,任务为返回 Promise 的函数 enqueue(task) { return new Promise((resolve, reject) => { this.queue.push({ task, resolve, reject }); this.dequeue(); }); } // 检查队列,若未达到并发限制则取出任务执行 dequeue() { if (this.running >= this.concurrentLimit) { return; } if (this.queue.length === 0) { return; } const { task, resolve, reject } = this.queue.shift(); this.running++; task() .then(result => { resolve(result); }) .catch(error => { reject(error); }) .finally(() => { this.running--; this.dequeue(); }); } // 获取当前等待执行的任务数 getQueueLength() { return this.queue.length; } } module.exports = TaskQueue;