transloadit/uppy · error · Error
Cannot mark a queued request as done: this indicates a bug
Error message
Cannot mark a queued request as done: this indicates a bug
What it means
An internal queued-request placeholder object throws if its done() method is ever called. The real queued request is swapped in later; calling done() on the placeholder means the request-tracking logic has a bug, not that you misconfigured anything.
Source
Thrown at packages/@uppy/tus/src/index.ts:435
if (!this.requests.isPaused) {
this.requests.pause()
window.addEventListener(
'online',
() => {
this.requests.resume()
},
{ once: true },
)
}
}
queuedRequest.abort()
queuedRequest = {
shouldBeRequeued: true,
abort() {
this.shouldBeRequeued = false
},
done() {
throw new Error(
'Cannot mark a queued request as done: this indicates a bug',
)
},
fn() {
throw new Error('Cannot run a queued request: this indicates a bug')
},
}
return true
}
if (onShouldRetry != null) {
uploadOptions.onShouldRetry = (
error: tus.DetailedError,
retryAttempt: number,
) => onShouldRetry(error, retryAttempt, opts, defaultOnShouldRetry)
} else {
uploadOptions.onShouldRetry = defaultOnShouldRetry
}View on GitHub (pinned to 5d4dedd02a)
Solutions
- Update to the latest @uppy/tus — report it on the Uppy GitHub issues with a reproduction if it persists
- Avoid programmatically aborting and immediately resuming the same file in the same tick
- If reproducible, reduce opts.limit concurrency to lower queue churn
Defensive patterns
Strategy: fallback
Try / catch
try { await uppy.upload() } catch (err) { if (err.message.includes('queued request')) await uppy.retryAll(); else throw err } Prevention
- Keep @uppy/tus updated
- Avoid aborting and resuming the same file in the same tick
- File an issue with a minimal reproduction if it recurs
When it happens
Trigger: A code path in the Tus plugin's internal queue marks the temporary placeholder request (created after an abort while a request is queued) as completed before the real request replaces it.
Common situations: Extremely rapid abort/resume cycles during uploads with limit-based queuing; generally only encountered as an internal plugin bug report, not through normal API use.
Related errors
- AbortError
- ${C.ERROR_PREFIX}Failed to abort multipart upload: ${String(
- The `metaFields` option has been renamed to `allowedMetaFiel
- The `autoRetry` option was deprecated and has been removed.
- File data is empty
AI-assisted analysis of transloadit/uppy@5d4dedd02a (2026-08-28).
Data as JSON: /api/errors/c8a5a0928ab65f41.
Report an issue: GitHub.