{"record":{"id":"0106119d5bf95a46","repo":"remotion-dev/remotion","slug":"the-continuerender-method-must-be-called-with-a","errorCode":null,"errorMessage":"The continueRender() method must be called with a parameter that is the return value of delayRender(). No value was passed.","messagePattern":"The continueRender\\(\\) method must be called with a parameter that is the return value of delayRender\\(\\)\\. No value was passed\\.","errorType":"exception","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"packages/core/src/delay-render.ts","lineNumber":154,"sourceCode":"/**\n * Internal function that accepts environment as parameter.\n * @private\n */\ntype ContinueRenderInternalOptions = {\n\tscope: DelayRenderScope;\n\thandle: number;\n\tenvironment: RemotionEnvironment;\n\tlogLevel: LogLevel;\n};\n\nexport const continueRenderInternal = ({\n\tscope,\n\thandle,\n\tenvironment,\n\tlogLevel,\n}: ContinueRenderInternalOptions): void => {\n\tif (typeof handle === 'undefined') {\n\t\tthrow new TypeError(\n\t\t\t'The continueRender() method must be called with a parameter that is the return value of delayRender(). No value was passed.',\n\t\t);\n\t}\n\n\tif (typeof handle !== 'number') {\n\t\tthrow new TypeError(\n\t\t\t'The parameter passed into continueRender() must be the return value of delayRender() which is a number. Got: ' +\n\t\t\t\tJSON.stringify(handle),\n\t\t);\n\t}\n\n\tconst handleExists = scope.remotion_delayRenderHandles.includes(handle);\n\tconst timeoutEntry = scope.remotion_delayRenderTimeouts[handle];\n\tif (handleExists && environment.isRendering && timeoutEntry) {\n\t\tconst {label, startTime, timeout} = timeoutEntry;\n\t\tclearTimeout(timeout);\n\t\tconst message = [\n\t\t\tlabel ? `\"${label}\"` : 'A handle',","sourceCodeStart":136,"sourceCodeEnd":172,"githubUrl":"https://github.com/remotion-dev/remotion/blob/78fe4bb3fdb5a2cd68724393d63cb223db333fa7/packages/core/src/delay-render.ts#L136-L172","documentation":"continueRender() unblocks a render previously delayed by delayRender() and must be passed the numeric handle that delayRender() returned. Calling it with no argument is a programming error (almost always a forgotten return value or an unbound variable), so it throws a TypeError immediately.","triggerScenarios":"Calling continueRender() with no argument, continueRender(undefined), or passing a variable that was never assigned the delayRender handle. Common in cleanup effects where the handle was not captured.","commonSituations":"Forgetting to capture const handle = delayRender(); calling continueRender in a different scope that lacks the handle; refactor that dropped the handle binding.","solutions":["Always capture the handle: const handle = delayRender('label'); then continueRender(handle).","Use the handle from the same scope that created it.","If using useDelayRender, let the hook manage the lifecycle instead of calling continueRender manually."],"exampleFix":"// before\ndelayRender('load');\nfetchData().then(() => continueRender()); // missing handle\n\n// after\nconst handle = delayRender('load');\nfetchData().then(() => continueRender(handle));","handlingStrategy":"validation","validationCode":"if (typeof handle !== 'number') {\n  // programming error: do not call continueRender\n} else {\n  continueRender(handle);\n}","typeGuard":"const isValidDelayHandle = (h: unknown): h is number =>\n  typeof h === 'number';","tryCatchPattern":null,"preventionTips":["Always capture `const handle = delayRender(...)` and pass it back to continueRender.","Keep handle in a ref/variable in scope for the cleanup call.","Prefer useDelayRender for component-driven lifecycles."],"tags":["rendering","validation","delay-render","typescript"],"backgroundTag":null,"analyzedSha":"78fe4bb3fdb5a2cd68724393d63cb223db333fa7","analyzedAt":"2026-08-12T17:18:50.444Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}