qishibo/AnotherRedisDesktopManager · error
e.message
Error message
e.message
What it means
Catch handler for the paged list scan in KeyContentList.vue's loadMore(). The component progressively LRANGEs the list key to fill the table; if any command in that chain (or in the continuation this.loadMore() triggers) rejects, the spinner is cleared (loadingIcon = ''), further paging is disabled (loadMoreDisable = true), and the raw error message is toasted. This is a transport/command failure, not a data validation issue.
Source
Thrown at src/components/contents/KeyContentList.vue:166
this.oneTimeListLength += listData.length;
this.listData = this.listData.concat(listData);
if (this.oneTimeListLength >= this.pageSize) {
this.loadingIcon = '';
this.oneTimeListLength = 0;
return;
}
if (this.cancelScanning) {
return;
}
// continue scanning until to pagesize
this.loadMore();
}).catch((e) => {
this.loadingIcon = '';
this.loadMoreDisable = true;
this.$message.error(e.message);
});
},
initTotal() {
this.client.llen(this.redisKey).then((reply) => {
this.total = reply;
}).catch((e) => {});
},
resetTable() {
this.listData = [];
this.pageIndex = 0;
this.oneTimeListLength = 0;
this.loadMoreDisable = false;
},
loadMore() {
this.pageIndex++;
this.listScan();
},
openDialog() {View on GitHub (pinned to c149855106)
Solutions
- If the message is connection-related: re-open/re-select the connection so the client reconnects, then click reload on the key tab
- If the key was deleted/recreated as another type: refresh the key list — WRONGTYPE means the name now holds a non-list value; open it with the matching viewer
- Check ACLs with ACL LIST / ACL GETUSER if a 'permission denied'-style message appears for this key only
- For long idle sessions, lower the keepalive/ping interval or reconnect before deep-paging very long lists
Example fix
// before: any scan error permanently disables paging until manual reset
}).catch((e) => {
this.loadingIcon = '';
this.loadMoreDisable = true;
this.$message.error(e.message);
});
// after: connection errors stay retryable instead of disabling the pager
}).catch((e) => {
this.loadingIcon = '';
const fatal = /WRONGTYPE|no such key/i.test(e.message);
this.loadMoreDisable = fatal;
this.$message.error(e.message);
}); Defensive patterns
Strategy: try-catch
Validate before calling
// before deep paging, verify the key is still a live list
const type = await client.type(this.redisKey);
if (type !== 'list') { this.resetTable(); return; } Type guard
null
Try / catch
// classify scan failures: transient link errors stay retryable, data errors resync
try {
await this.loadMore();
} catch (e) {
this.loadingIcon = '';
const msg = String(e.message || e);
if (/closed|ECONNRESET|timeout/i.test(msg)) {
this.$message.warning('Connection lost — retry after reconnect');
// keep loadMoreDisable = false so paging can resume
} else {
this.loadMoreDisable = true; // WRONGTYPE / permissions: refresh needed
this.$message.error(msg);
}
} Prevention
- Re-check TYPE/EXISTS before each page fetch on long lists instead of assuming the key is stable
- Use .finally to clear loadingIcon so a rejection can never strand the spinner
- Enable TCP keepalive / periodic PING on long browsing sessions against remote or managed Redis
- Disable the pager only for data-model errors (WRONGTYPE, ACL); connection errors should allow retry
When it happens
Trigger: LRANGE redisKey start stop rejecting: the key was deleted or expired between page loads (reply becomes empty rather than error, but WRONGTYPE fires if the key was recreated as another type); the connection was closed/idle-killed mid-scan (Error: Connection is closed); ACL user lacks read permission on the key; server OOM/maxmemory eviction while paging a long list.
Common situations: Scrolling a long list in a GUI while another client FLUSHes or DELs the key; laptop sleep/resume dropping a keepalive-less TCP connection to remote Redis; Redis restart during browsing; proxy/LB idle timeout (e.g. 60s) killing the socket between page fetches; large-list paging putting the link under load.
Related errors
- ${this.$t('message.modify_failed')}, ${this.$t('message.valu
- this.$t('message.delete_failed')
- Type Error: ${e.message}
- this.$t('message.delete_failed')
- e.message
AI-assisted analysis of qishibo/AnotherRedisDesktopManager@c149855106 (2026-08-22).
Data as JSON: /api/errors/ca0b3cd532fe8a8c.
Report an issue: GitHub.