Skip to content

fix: support async subscribe in useSWRSubscription#4244

Open
solssak wants to merge 1 commit intovercel:mainfrom
solssak:fix/async-subscription
Open

fix: support async subscribe in useSWRSubscription#4244
solssak wants to merge 1 commit intovercel:mainfrom
solssak:fix/async-subscription

Conversation

@solssak
Copy link
Copy Markdown

@solssak solssak commented Apr 13, 2026

useSWRSubscription does not support async subscribe functions. When the subscribe callback is async (e.g. to connect to AWS Amplify), the returned Promise is not handled, causing the typeof check to throw.

This PR adds support for async subscribe by detecting Promise returns and resolving them properly, including handling the race condition where the component unmounts before the async subscribe resolves.

Fixes #4214

src/subscription/types.ts — Subscribe return type now accepts Promise.
src/subscription/index.ts — Detect and handle Promise returns from subscribe().
test/ — Added runtime and type tests for async subscribe.

All checks pass: pnpm run-all-checks + pnpm test (367 tests passed).

Handle async subscribe functions that return a Promise, such as those
needed for AWS Amplify or other async connection APIs.

- Detect Promise returns and resolve them to get the dispose function
- Handle race condition where cleanup runs before async subscribe resolves
- Update TypeScript types to explicitly allow async subscribe
- Add runtime and type tests

Fixes vercel#4214
@solssak solssak requested review from huozhi and shuding as code owners April 13, 2026 05:26
@codesandbox-ci
Copy link
Copy Markdown

This pull request is automatically built and testable in CodeSandbox.

To see build info of the built libraries, click here or the icon next to each commit SHA.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

useSWRSubscription does not work with async subscribe function

1 participant