fix: 修复批量 Deep Scan 队列显示问题
问题: - 使用静态的 position 计算 queuePosition,导致队列显示不准确 - 任务实际执行时间不确定,导致队列状态显示错误 修复: - 使用 processing 变量跟踪正在处理的任务数量 - 动态计算队列数量:queueCount = filesToProcess.length - successCount - failCount - processing - 确保队列状态实时更新 改进: - 添加 processing 变量跟踪正在处理的任务 - 在 finally 块中递减 processing 计数器 - 实时更新队列显示,反映真实状态
This commit is contained in:
@@ -1893,12 +1893,13 @@ async function batchDeepScan() {
|
|||||||
const immediateCount = Math.min(filesToProcess.length, maxConcurrent)
|
const immediateCount = Math.min(filesToProcess.length, maxConcurrent)
|
||||||
const queueTotal = Math.max(0, filesToProcess.length - maxConcurrent)
|
const queueTotal = Math.max(0, filesToProcess.length - maxConcurrent)
|
||||||
|
|
||||||
actionMsg.value = `Starting: ${immediateCount} immediate, ${queueTotal} queuing...`
|
let processing = 0
|
||||||
|
|
||||||
let successCount = 0
|
let successCount = 0
|
||||||
let failCount = 0
|
let failCount = 0
|
||||||
|
|
||||||
const tasks = filesToProcess.map((f, index) => {
|
actionMsg.value = `Starting: ${immediateCount} immediate, ${queueTotal} queuing...`
|
||||||
|
|
||||||
|
const tasks = filesToProcess.map((f) => {
|
||||||
return limit(async () => {
|
return limit(async () => {
|
||||||
const fileUuid = f.file_uuid
|
const fileUuid = f.file_uuid
|
||||||
if (!fileUuid) {
|
if (!fileUuid) {
|
||||||
@@ -1906,19 +1907,20 @@ async function batchDeepScan() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
const position = index + 1
|
processing++
|
||||||
const queuePosition = position - maxConcurrent
|
const queueCount = Math.max(0, filesToProcess.length - successCount - failCount - processing)
|
||||||
|
|
||||||
if (queuePosition > 0) {
|
if (queueCount > 0) {
|
||||||
actionMsg.value = `Processing ${successCount + 1}/${filesToProcess.length} (${queuePosition} queuing)...`
|
actionMsg.value = `Processing ${successCount + 1}/${filesToProcess.length} (${queueCount} queuing)...`
|
||||||
} else {
|
} else {
|
||||||
actionMsg.value = `Processing ${position}/${filesToProcess.length}...`
|
actionMsg.value = `Processing ${successCount + 1}/${filesToProcess.length}...`
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const file = filesCache.value.find((x: any) => x.file_uuid === fileUuid)
|
const file = filesCache.value.find((x: any) => x.file_uuid === fileUuid)
|
||||||
if (!file) {
|
if (!file) {
|
||||||
failCount++
|
failCount++
|
||||||
|
processing--
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1940,6 +1942,8 @@ async function batchDeepScan() {
|
|||||||
} catch (e: any) {
|
} catch (e: any) {
|
||||||
failCount++
|
failCount++
|
||||||
console.error('[batchDeepScan] Failed:', f.file_name, e)
|
console.error('[batchDeepScan] Failed:', f.file_name, e)
|
||||||
|
} finally {
|
||||||
|
processing--
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user