fix: WRONGTYPE 错误处理 - key 类型变更时不崩溃
- loadKeyData: 类型特定命令 (SCARD/LLEN 等) 失败时重新获取 key 类型, 避免显示错误的编辑器 - SetEditor.loadMembers: 添加 catch 块, WRONGTYPE 时清空成员列表而非 抛出未捕获异常
This commit is contained in:
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user