Skip to content

Vite hot reload with bindings causes "promise was resolved or rejected from a different request context" #12731

@nihalgonsalves

Description

@nihalgonsalves

What versions & operating system are you using?

  System:
    OS: macOS 26.3
    CPU: (12) arm64 Apple M2 Max
    Memory: 273.33 MB / 32.00 GB
    Shell: 5.9 - /bin/zsh
  Binaries:
    Node: 24.14.0 - /opt/homebrew/opt/node@24/bin/node
    npm: 11.9.0 - /opt/homebrew/opt/node@24/bin/npm
    pnpm: 10.18.3 - /opt/homebrew/opt/node@24/bin/pnpm
    bun: 1.3.10 - /opt/homebrew/bin/bun
  npmPackages:
    @cloudflare/vite-plugin: ^1.25.6 => 1.25.6
    miniflare: ^4.20260305.0 => 4.20260305.0
    wrangler: ^4.69.0 => 4.69.0

Please provide a link to a minimal reproduction

https://github.com/nihalgonsalves/waku/tree/755299431ece64bd89d297a5dad2aa951d3cd399/examples/07_cloudflare

Describe the Bug

Accessing a binding, such as D1, in a async (RSC) component and hot reloading causes a crash with the @cloudflare/vite-plugin. This seems similar to the solved issue #9519 (PR #9993).

Simply making a query inside the component is enough:

export default async function HomePage() {
  // ...

  const result = await env.test_db.prepare(
    "SELECT 1",
  )
    .run();

  // ...
}

After a save or two, this error is printed in the server logs:

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 <anonymous>
    at resolve (<>/waku/examples/07_cloudflare/node_modules/.vite/deps_rsc/react-server-dom-webpack_client__edge.js:3425:13)
    at wakeChunk (<>/waku/examples/07_cloudflare/node_modules/.vite/deps_rsc/react-server-dom-webpack_client__edge.js:1215:44)
    at wakeChunkIfInitialized (<>/waku/examples/07_cloudflare/node_modules/.vite/deps_rsc/react-server-dom-webpack_client__edge.js:1241:13)
    at resolveModelChunk (<>/waku/examples/07_cloudflare/node_modules/.vite/deps_rsc/react-server-dom-webpack_client__edge.js:1323:70)
    at processFullBinaryRow (<>/waku/examples/07_cloudflare/node_modules/.vite/deps_rsc/react-server-dom-webpack_client__edge.js:3220:107)
    at progress (<>/waku/examples/07_cloudflare/node_modules/.vite/deps_rsc/react-server-dom-webpack_client__edge.js:3375:20)

This eventually causes the browser load to crash with:

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:///<>/waku/examples/07_cloudflare/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 compatibility flag the first error mention, you'll get this error instead:

[SSR Error]
    at fn (<>/waku/examples/07_cloudflare/node_modules/.vite/deps_ssr/react-server-dom-webpack_client__edge.js?v=a4993e9a:2405:20)
    at fn (<>/waku/examples/07_cloudflare/node_modules/.vite/deps_ssr/react-server-dom-webpack_client__edge.js?v=a4993e9a: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 (<>/waku/examples/07_cloudflare/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 <>/waku/examples/07_cloudflare/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 <>/waku/examples/07_cloudflare/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__ (<>/waku/examples/07_cloudflare/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 (<>/waku/examples/07_cloudflare/node_modules/.vite/deps_ssr/react-server-dom-webpack_client__edge.js:53:23)
    at preloadModule (<>/waku/examples/07_cloudflare/node_modules/.vite/deps_ssr/react-server-dom-webpack_client__edge.js:83:64)

Note that for this specific Waku example linked as a reproduction it's more reliably triggered via Safari.


I can trigger a similar error using TanStack Start + server functions:

npm create cloudflare@latest -- my-tanstack-start-app --framework=tanstack-start
const serverLoader = createServerFn({ method: "GET" }).handler(async () => {
  const result = await env.test_db.prepare("SELECT 456").run();
  return result;
});

export const Route = createFileRoute("/")({
  loader: async () => {
    return serverLoader();
  },
  component: App,
});

This crashes less often but the error is nevertheless there.


Related issue in the Waku repository wakujs/waku#1975

Please provide any relevant error logs

No response

Metadata

Metadata

Assignees

Labels

vite-pluginRelating to the `@cloudflare/vite-plugin` package

Type

No fields configured for Bug.

Projects

Status

Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions