From 78695c0b7fdd129a252414af994697d82a48d999 Mon Sep 17 00:00:00 2001 From: Jokul Date: Sat, 11 Jul 2026 15:52:33 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20WRONGTYPE=20=E9=94=99=E8=AF=AF=E5=A4=84?= =?UTF-8?q?=E7=90=86=20-=20key=20=E7=B1=BB=E5=9E=8B=E5=8F=98=E6=9B=B4?= =?UTF-8?q?=E6=97=B6=E4=B8=8D=E5=B4=A9=E6=BA=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - loadKeyData: 类型特定命令 (SCARD/LLEN 等) 失败时重新获取 key 类型, 避免显示错误的编辑器 - SetEditor.loadMembers: 添加 catch 块, WRONGTYPE 时清空成员列表而非 抛出未捕获异常 --- src/renderer/src/components/SetEditor.vue | 2 + src/renderer/src/stores/key.ts | 74 +++++++++++++---------- 2 files changed, 43 insertions(+), 33 deletions(-) diff --git a/src/renderer/src/components/SetEditor.vue b/src/renderer/src/components/SetEditor.vue index 29447dd..24ff89c 100644 --- a/src/renderer/src/components/SetEditor.vue +++ b/src/renderer/src/components/SetEditor.vue @@ -20,6 +20,8 @@ async function loadMembers() { loading.value = true try { members.value = await window.electronAPI.redis.setMembers(connStore.activeId, keyStore.selectedKey) + } catch { + members.value = [] } finally { loading.value = false } diff --git a/src/renderer/src/stores/key.ts b/src/renderer/src/stores/key.ts index db95de3..80288a0 100644 --- a/src/renderer/src/stores/key.ts +++ b/src/renderer/src/stores/key.ts @@ -138,41 +138,49 @@ export const useKeyStore = defineStore('key', () => { await loadKeyTypeAndTTL(connId, key) selectedKey.value = key - switch (selectedType.value) { - case 'string': - keyData.value = await window.electronAPI.redis.getString(connId, key) - break - case 'hash': { - const result = await window.electronAPI.redis.hashScan(connId, key, '0', 100) - 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 } + try { + switch (selectedType.value) { + case 'string': + keyData.value = await window.electronAPI.redis.getString(connId, key) + break + case 'hash': { + const result = await window.electronAPI.redis.hashScan(connId, key, '0', 100) + keyData.value = result.fields + break } - 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: - keyData.value = null + } catch { + // 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 { loading.value = false