/** * 图片处理队列 * 确保图片严格按照顺序处理,避免异步操作导致的顺序混乱 */ class ImageProcessingQueue { constructor() { this.queue = [] this.processing = false this.results = new Map() // 存储处理结果,key为索引,value为结果 } /** * 添加图片处理任务到队列 * @param {number} index - 图片索引 * @param {Function} processor - 处理函数 * @returns {Promise} 处理结果的Promise */ async addTask(index, processor) { return new Promise((resolve, reject) => { const task = { index, processor, resolve, reject, addTime: Date.now() } this.queue.push(task) console.log(`[图片队列] 任务${index}已添加到队列,队列长度: ${this.queue.length}`) // 如果队列没有在处理,开始处理 if (!this.processing) { this.processQueue() } }) } /** * 处理队列中的任务 */ async processQueue() { if (this.processing || this.queue.length === 0) { return } this.processing = true console.log(`[图片队列] 开始处理队列,共${this.queue.length}个任务`) while (this.queue.length > 0) { const task = this.queue.shift() const startTime = Date.now() console.log(`[图片队列] 开始处理任务${task.index},等待时间: ${startTime - task.addTime}ms`) try { const result = await task.processor() const endTime = Date.now() const processingTime = endTime - startTime console.log(`[图片队列] 任务${task.index}处理完成,耗时: ${processingTime}ms`) // 存储结果 this.results.set(task.index, { result, processingTime, completedAt: endTime }) task.resolve(result) } catch (error) { console.error(`[图片队列] 任务${task.index}处理失败: ${error.message}`) task.reject(error) } } this.processing = false console.log(`[图片队列] 队列处理完成`) } /** * 获取所有结果,按索引顺序排列 * @returns {Array} 按顺序排列的结果数组 */ getOrderedResults() { const sortedKeys = Array.from(this.results.keys()).sort((a, b) => a - b) return sortedKeys.map(key => ({ index: key, ...this.results.get(key) })) } /** * 清空队列和结果 */ clear() { this.queue = [] this.results.clear() this.processing = false console.log(`[图片队列] 队列已清空`) } /** * 获取队列状态 */ getStatus() { return { queueLength: this.queue.length, processing: this.processing, resultsCount: this.results.size } } } module.exports = ImageProcessingQueue