-
-
Notifications
You must be signed in to change notification settings - Fork 1.5k
fix: AbortError in renderToReadableStream #6539
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
checkerschaf
wants to merge
1
commit into
TanStack:main
Choose a base branch
from
checkerschaf:fix/abort-error-render-to-readable-stream
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+31
−16
Open
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🏁 Script executed:
# First, let's look at the full context of the renderRouterToStream.tsx file fd renderRouterToStream.tsx -t fRepository: TanStack/router
Length of output: 221
🏁 Script executed:
Repository: TanStack/router
Length of output: 3920
🏁 Script executed:
Repository: TanStack/router
Length of output: 1394
🏁 Script executed:
Repository: TanStack/router
Length of output: 292
🏁 Script executed:
Repository: TanStack/router
Length of output: 41
🏁 Script executed:
Repository: TanStack/router
Length of output: 110
🏁 Script executed:
Repository: TanStack/router
Length of output: 41
🏁 Script executed:
# Let's check the git commit that fixed AbortError to understand the error handling approach git show 90c04a311 --statRepository: TanStack/router
Length of output: 50372
🏁 Script executed:
# Look at the commit to understand the context git show 90c04a311Repository: TanStack/router
Length of output: 50376
🌐 Web query:
React renderToReadableStream onError callback behavior when to return status 500💡 Result:
renderToReadableStream’sonErrorfires for any server rendering error (recoverable or not), including errors that happen inside<Suspense>boundaries where React can still stream a shell and let the client recover. In those “recoverable” cases,onErrorruns but therenderToReadableStream(...)promise does not reject. (react.dev)When to return HTTP 500
1) Shell (initial HTML) fails → return 500 via
catchawait renderToReadableStream(...)will throw/reject, so you can return a fallback HTML response withstatus: 500.onErrorand yourcatchrun (useonErrorfor logging; usecatchto construct the 500 response). (react.dev)2) Non-shell (inside
<Suspense>) errors → you may still return 200onErrorfired. (react.dev)3) If you want 500 when any error happened before you create the
ResponseTrack a flag in
onError, then set status when returning theResponse(works only for errors that occur before headers are committed—i.e., before you return theResponse). (react.dev)Key streaming constraint
Once streaming starts (i.e., once you’ve returned the
Responseand bytes may be sent), you generally can’t change the status code afterward—so decide the status before returning theResponse. (react.dev)Citations:
Prevent HTTP 200 responses when render errors occur during streaming.
The
onErrorcallback logs rendering errors but doesn't affect the response status—render-time errors within<Suspense>boundaries won't reject the stream promise, so the response still usesrouter.state.statusCode(likely 200). Track errors inonErrorand return 500 when they occur:🐛 Proposed fix
🤖 Prompt for AI Agents