fix: WRONGTYPE 错误处理 - key 类型变更时不崩溃

- loadKeyData: 类型特定命令 (SCARD/LLEN 等) 失败时重新获取 key 类型,
  避免显示错误的编辑器
- SetEditor.loadMembers: 添加 catch 块, WRONGTYPE 时清空成员列表而非
  抛出未捕获异常
This commit is contained in:
2026-07-11 15:52:33 +08:00
parent 99f8a8b250
commit 78695c0b7f
2 changed files with 43 additions and 33 deletions
@@ -20,6 +20,8 @@ async function loadMembers() {
loading.value = true loading.value = true
try { try {
members.value = await window.electronAPI.redis.setMembers(connStore.activeId, keyStore.selectedKey) members.value = await window.electronAPI.redis.setMembers(connStore.activeId, keyStore.selectedKey)
} catch {
members.value = []
} finally { } finally {
loading.value = false loading.value = false
} }
+41 -33
View File
@@ -138,41 +138,49 @@ export const useKeyStore = defineStore('key', () => {
await loadKeyTypeAndTTL(connId, key) await loadKeyTypeAndTTL(connId, key)
selectedKey.value = key selectedKey.value = key
switch (selectedType.value) { try {
case 'string': switch (selectedType.value) {
keyData.value = await window.electronAPI.redis.getString(connId, key) case 'string':
break keyData.value = await window.electronAPI.redis.getString(connId, key)
case 'hash': { break
const result = await window.electronAPI.redis.hashScan(connId, key, '0', 100) case 'hash': {
keyData.value = result.fields const result = await window.electronAPI.redis.hashScan(connId, key, '0', 100)
break keyData.value = result.fields
} break
case 'list': {
const len = await window.electronAPI.redis.listLength(connId, key)
keyData.value = { length: len }
break
}
case 'set': {
const size = await window.electronAPI.redis.setSize(connId, key)
keyData.value = { size }
break
}
case 'zset': {
const size = await window.electronAPI.redis.zsetSize(connId, key)
keyData.value = { size }
break
}
case 'stream': {
try {
const info = await window.electronAPI.redis.streamInfo(connId, key)
keyData.value = { length: info.length }
} catch {
keyData.value = { length: 0 }
} }
break case 'list': {
const len = await window.electronAPI.redis.listLength(connId, key)
keyData.value = { length: len }
break
}
case 'set': {
const size = await window.electronAPI.redis.setSize(connId, key)
keyData.value = { size }
break
}
case 'zset': {
const size = await window.electronAPI.redis.zsetSize(connId, key)
keyData.value = { size }
break
}
case 'stream': {
try {
const info = await window.electronAPI.redis.streamInfo(connId, key)
keyData.value = { length: info.length }
} catch {
keyData.value = { length: 0 }
}
break
}
default:
keyData.value = null
} }
default: } catch {
keyData.value = null // Type might have changed between TYPE check and the type-specific
// command (e.g. key was overwritten). Re-fetch the type so the
// correct editor is shown.
await loadKeyTypeAndTTL(connId, key)
keyData.value = null
} }
} finally { } finally {
loading.value = false loading.value = false