fix: browse序号保护防止token刷新重试导致的双刷新
This commit is contained in:
@@ -851,8 +851,12 @@ function openInTerminal() {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 序号保护:防止并发/重试请求导致旧结果覆盖新结果
|
||||||
|
let _browseSeq = 0
|
||||||
|
|
||||||
async function browse() {
|
async function browse() {
|
||||||
if (!selectedServer.value) return
|
if (!selectedServer.value) return
|
||||||
|
const seq = ++_browseSeq
|
||||||
loading.value = true
|
loading.value = true
|
||||||
const path = normalizeRemotePath(currentPath.value)
|
const path = normalizeRemotePath(currentPath.value)
|
||||||
currentPath.value = path
|
currentPath.value = path
|
||||||
@@ -861,6 +865,8 @@ async function browse() {
|
|||||||
server_id: selectedServer.value,
|
server_id: selectedServer.value,
|
||||||
path,
|
path,
|
||||||
})
|
})
|
||||||
|
// 如果期间启动了更新的 browse(token刷新重试/快速导航),丢弃本次结果
|
||||||
|
if (seq !== _browseSeq) return
|
||||||
const { items, error } = parseBrowseResponse(res)
|
const { items, error } = parseBrowseResponse(res)
|
||||||
|
|
||||||
// Auto-fallback: if path doesn't exist, try parent directories automatically
|
// Auto-fallback: if path doesn't exist, try parent directories automatically
|
||||||
@@ -886,11 +892,14 @@ async function browse() {
|
|||||||
preloadDirectoryFiles(selectedServer.value, path, items)
|
preloadDirectoryFiles(selectedServer.value, path, items)
|
||||||
}
|
}
|
||||||
} catch {
|
} catch {
|
||||||
|
if (seq !== _browseSeq) return
|
||||||
files.value = []
|
files.value = []
|
||||||
snackbar('浏览目录失败', 'error')
|
snackbar('浏览目录失败', 'error')
|
||||||
} finally {
|
} finally {
|
||||||
loading.value = false
|
if (seq === _browseSeq) {
|
||||||
syncRouteQuery()
|
loading.value = false
|
||||||
|
syncRouteQuery()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user