update at 2026-02-11 19:35:34
This commit is contained in:
@@ -50,6 +50,7 @@ let previewGenerateTimer: ReturnType<typeof setTimeout> | null = null
|
||||
let previewGenerationToken = 0
|
||||
let hasTriggeredInitialGenerate = false
|
||||
let previewLazyLoadObserver: IntersectionObserver | null = null
|
||||
let batchOwnerToken: number | null = null
|
||||
|
||||
const previewApiCache = new Map<string, PreviewApiCacheItem>()
|
||||
|
||||
@@ -375,16 +376,26 @@ async function generatePreviewBatch(
|
||||
}
|
||||
|
||||
async function loadNextPreviewBatch(generationToken: number) {
|
||||
if (isBatchGenerating.value || isStaleGeneration(generationToken)) {
|
||||
if (isStaleGeneration(generationToken)) {
|
||||
return
|
||||
}
|
||||
|
||||
if (isBatchGenerating.value) {
|
||||
if (batchOwnerToken === generationToken) {
|
||||
return
|
||||
}
|
||||
// 旧批次仍在收尾时,允许新批次接管
|
||||
isBatchGenerating.value = false
|
||||
batchOwnerToken = null
|
||||
}
|
||||
|
||||
const startIndex = processedFontCount.value
|
||||
if (startIndex >= activePreviewFonts.value.length) {
|
||||
return
|
||||
}
|
||||
|
||||
isBatchGenerating.value = true
|
||||
batchOwnerToken = generationToken
|
||||
|
||||
try {
|
||||
const batchItems = await generatePreviewBatch(
|
||||
@@ -418,8 +429,9 @@ async function loadNextPreviewBatch(generationToken: number) {
|
||||
console.error('Failed to load preview batch:', error)
|
||||
previewErrorMessage.value = `预览生成失败:${error instanceof Error ? error.message : String(error)}`
|
||||
} finally {
|
||||
if (!isStaleGeneration(generationToken)) {
|
||||
if (batchOwnerToken === generationToken) {
|
||||
isBatchGenerating.value = false
|
||||
batchOwnerToken = null
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -517,6 +529,7 @@ onBeforeUnmount(() => {
|
||||
}
|
||||
disconnectPreviewLazyLoadObserver()
|
||||
previewGenerationToken += 1
|
||||
batchOwnerToken = null
|
||||
})
|
||||
|
||||
function toggleSelectItem(item: PreviewItemType) {
|
||||
|
||||
Reference in New Issue
Block a user