Reproduction:
This works in general, but as soon as you trigger a hot reload by saving somewhere, you get this in the server logs:
9:25:54 AM [vite] (rsc) hmr update /@id/virtual:cloudflare/worker-entry, /src/styles.css
Warning: A promise was resolved or rejected from a different request context than the one it was created in. However, the creating request has already been completed or canceled. Continuations for that request are unlikely to run safely and have been canceled. If this behavior breaks your worker, consider setting the `no_handle_cross_request_promise_resolution` compatibility flag for your worker.
at CustomModuleRunner.import (workers/runner-worker.js:1045:10)
Warning: A promise was resolved or rejected from a different request context than the one it was created in. However, the creating request has already been completed or canceled. Continuations for that request are unlikely to run safely and have been canceled. If this behavior breaks your worker, consider setting the `no_handle_cross_request_promise_resolution` compatibility flag for your worker.
at CustomModuleRunner.import (workers/runner-worker.js:1045:10)
After a moment, the browser tab will also crash with this message:
Error: The Workers runtime canceled this request because it detected that your Worker's code had hung and would never generate a response. Refer to: https://developers.cloudflare.com/workers/observability/errors/
at async Object.fetch (file:///< repository>/node_modules/.pnpm/miniflare@4.20260305.0/node_modules/miniflare/dist/src/workers/core/entry.worker.js:4497:22)
If you add the no_handle_cross_request_promise_resolution flag as the first error says, you'll get this error instead:
[vite] hot updated: virtual:cloudflare/worker-entry
[SSR Error]
at fn (<repository>/node_modules/.vite/deps_ssr/react-server-dom-webpack_client__edge.js?v=37af8570:2405:20)
at fn (<repository>/node_modules/.vite/deps_ssr/react-server-dom-webpack_client__edge.js?v=37af8570:2405:20)
Error: Cannot perform I/O on behalf of a different request. I/O objects (such as streams, request/response bodies, and others) created in the context of one request handler cannot be accessed from a different request's handler. This is a limitation of Cloudflare Workers which allows us to improve overall performance. (I/O type: SpanParent)
at RpcProperty.<anonymous> (<anonymous>)
at CustomModuleRunner.cachedModule (workers/runner-worker.js:1196:76)
at request (workers/runner-worker.js:1123:94)
at dynamicRequest (workers/runner-worker.js:1125:122)
at Object.load (<repository>/node_modules/.pnpm/@vitejs+plugin-rsc@0.5.21_react-dom@19.2.4_react@19.2.4__react-server-dom-webpack@19.2._336fd4df9d8e62120fabaccf47fa08cf/node_modules/@vitejs/plugin-rsc/dist/ssr.js:22:10)
at <repository>/node_modules/.pnpm/@vitejs+plugin-rsc@0.5.21_react-dom@19.2.4_react@19.2.4__react-server-dom-webpack@19.2._336fd4df9d8e62120fabaccf47fa08cf/node_modules/@vitejs/plugin-rsc/dist/core/ssr.js:10:18
at <repository>/node_modules/.pnpm/@vitejs+plugin-rsc@0.5.21_react-dom@19.2.4_react@19.2.4__react-server-dom-webpack@19.2._336fd4df9d8e62120fabaccf47fa08cf/node_modules/@vitejs/plugin-rsc/dist/dist-yW9-EeG1.js:34:22
at globalThis.__vite_rsc_require__ (<repository>/node_modules/.pnpm/@vitejs+plugin-rsc@0.5.21_react-dom@19.2.4_react@19.2.4__react-server-dom-webpack@19.2._336fd4df9d8e62120fabaccf47fa08cf/node_modules/@vitejs/plugin-rsc/dist/shared-Dhw3vs8e.js:16:21)
at requireAsyncModule (<repository>/node_modules/.vite/deps_ssr/react-server-dom-webpack_client__edge.js:53:23)
at preloadModule (<repository>/node_modules/.vite/deps_ssr/react-server-dom-webpack_client__edge.js:83:64)
[vite] program reload
Reproduction:
Start from https://github.com/wakujs/waku/tree/7b73f88fd668dc249f6c357f37f6e979b927132e/examples/07_cloudflare
Add a D1 database to
wrangler.jsonc(optionally runnpx wrangler types)Make a query in a server component:
This works in general, but as soon as you trigger a hot reload by saving somewhere, you get this in the server logs:
After a moment, the browser tab will also crash with this message:
If you add the
no_handle_cross_request_promise_resolutionflag as the first error says, you'll get this error instead: