qishibo/AnotherRedisDesktopManager · warning
(error) ERR EXEC without MULTI
Error message
(error) ERR EXEC without MULTI
What it means
Same client-side transaction guard as DISCARD: EXEC is only valid while multiQueue is an Array (set by MULTI). When it is null, the CLI locally echoes '(error) ERR EXEC without MULTI' instead of sending anoClient.multi(multiQueue).execBuffer(). No network round-trip occurs.
Source
Thrown at src/components/CliTab.vue:232
this.multiQueue = [];
return this.scrollToBottom('OK');
}
// multi-discard-mode
if (paramsArr[0] == 'discard') {
// discard when not multi condition
if (!Array.isArray(this.multiQueue)) {
return this.scrollToBottom('(error) ERR DISCARD without MULTI');
}
this.multiQueue = null;
return this.scrollToBottom('OK');
}
// multi dequeue
if (paramsArr[0] == 'exec') {
// exec when not multi condition
if (!Array.isArray(this.multiQueue)) {
return this.scrollToBottom('(error) ERR EXEC without MULTI');
}
this.anoClient.multi(this.multiQueue).execBuffer((err, reply) => {
if (err) {
this.content.push(`${err}`);
} else {
this.content.push(this.resolveResult(reply).trim());
}
this.scrollToBottom();
});
return this.multiQueue = null;
}
// multi enqueue
if (Array.isArray(this.multiQueue)) {
this.multiQueue.push(['callBuffer', paramsArr[0], ...paramsArr.slice(1)]);View on GitHub (pinned to c149855106)
Solutions
- Begin with MULTI, queue commands, then EXEC
- Review prior output to see whether an earlier EXEC/DISCARD or error already ended the transaction
- Re-issue the full MULTI ... EXEC sequence
Defensive patterns
Strategy: validation
Validate before calling
// validate local transaction state before EXEC
function canExec(multiQueue) {
return Array.isArray(multiQueue) && multiQueue.length >= 0;
}
if (paramsArr[0] === 'exec' && !canExec(this.multiQueue)) {
return this.scrollToBottom('no MULTI in progress - type MULTI first');
} Prevention
- Always open with MULTI; EXEC/DISCARD are only valid inside it
- A failed command in this CLI aborts the queue - restart the transaction after any error
- Keep pasted scripts self-contained MULTI..EXEC so replay is idempotent
When it happens
Trigger: Typing EXEC in the workbench CLI before any MULTI; after a prior EXEC consumed the queue; or after a failed command's .catch reset multiQueue to null mid-transaction.
Common situations: Replaying pasted transaction scripts, switching tabs mid-MULTI and losing track of state, queue aborted by an errored queued command.
Related errors
- (error) ERR DISCARD without MULTI
- err.message
- Sentinel & Cluster cannot be checked together!
- message || this.$t('message.test_connection_failed')
- this.$t('message.test_connection_timeout')
AI-assisted analysis of qishibo/AnotherRedisDesktopManager@c149855106 (2026-08-22).
Data as JSON: /api/errors/b42f9c85b11641a6.
Report an issue: GitHub.