Skip to content

[Flight] Serialize already resolved Promises as debug models #33588

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
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

sebmarkbage
Copy link
Collaborator

We already support serializing the values of instrumented Promises as debug values such as in console logs. However, we don't support plain native promises.

This waits a microtask to see if we can read the value within a microtask and if so emit it. This is so that we can still close the connection.

Otherwise, we emit a "halted" row into its row id which replaces the old "Infinite Promise" reference.

We could potentially wait until the end of the render before cancelling so that if it resolves before we exit we can still include its value but that would require a bit more work. Ideally we'd have a way to get these lazily later anyway.

@sebmarkbage sebmarkbage requested a review from unstubbable June 21, 2025 15:53
@github-actions github-actions bot added the React Core Team Opened by a member of the React Core Team label Jun 21, 2025
@react-sizebot
Copy link

Comparing: 6c7b1a1...e865e01

Critical size changes

Includes critical production bundles, as well as any change greater than 2%:

Name +/- Base Current +/- gzip Base gzip Current gzip
oss-stable/react-dom/cjs/react-dom.production.js = 6.68 kB 6.68 kB = 1.83 kB 1.83 kB
oss-stable/react-dom/cjs/react-dom-client.production.js = 530.57 kB 530.57 kB = 93.67 kB 93.67 kB
oss-experimental/react-dom/cjs/react-dom.production.js = 6.69 kB 6.69 kB = 1.83 kB 1.83 kB
oss-experimental/react-dom/cjs/react-dom-client.production.js = 651.66 kB 651.66 kB = 114.78 kB 114.78 kB
facebook-www/ReactDOM-prod.classic.js = 674.81 kB 674.81 kB = 118.78 kB 118.78 kB
facebook-www/ReactDOM-prod.modern.js = 665.30 kB 665.30 kB = 117.19 kB 117.19 kB
oss-experimental/react-noop-renderer/cjs/react-noop-renderer-flight-client.production.js +9.04% 1.78 kB 1.94 kB +4.13% 0.73 kB 0.76 kB
oss-stable-semver/react-noop-renderer/cjs/react-noop-renderer-flight-client.production.js +9.04% 1.78 kB 1.94 kB +4.13% 0.73 kB 0.76 kB
oss-stable/react-noop-renderer/cjs/react-noop-renderer-flight-client.production.js +9.04% 1.78 kB 1.94 kB +4.13% 0.73 kB 0.76 kB
oss-experimental/react-noop-renderer/cjs/react-noop-renderer-flight-client.development.js +9.03% 2.05 kB 2.23 kB +3.48% 0.78 kB 0.80 kB
oss-stable-semver/react-noop-renderer/cjs/react-noop-renderer-flight-client.development.js +9.03% 2.05 kB 2.23 kB +3.48% 0.78 kB 0.80 kB
oss-stable/react-noop-renderer/cjs/react-noop-renderer-flight-client.development.js +9.03% 2.05 kB 2.23 kB +3.48% 0.78 kB 0.80 kB

Significant size changes

Includes any change greater than 0.2%:

Expand to show
Name +/- Base Current +/- gzip Base gzip Current gzip
oss-experimental/react-noop-renderer/cjs/react-noop-renderer-flight-client.production.js +9.04% 1.78 kB 1.94 kB +4.13% 0.73 kB 0.76 kB
oss-stable-semver/react-noop-renderer/cjs/react-noop-renderer-flight-client.production.js +9.04% 1.78 kB 1.94 kB +4.13% 0.73 kB 0.76 kB
oss-stable/react-noop-renderer/cjs/react-noop-renderer-flight-client.production.js +9.04% 1.78 kB 1.94 kB +4.13% 0.73 kB 0.76 kB
oss-experimental/react-noop-renderer/cjs/react-noop-renderer-flight-client.development.js +9.03% 2.05 kB 2.23 kB +3.48% 0.78 kB 0.80 kB
oss-stable-semver/react-noop-renderer/cjs/react-noop-renderer-flight-client.development.js +9.03% 2.05 kB 2.23 kB +3.48% 0.78 kB 0.80 kB
oss-stable/react-noop-renderer/cjs/react-noop-renderer-flight-client.development.js +9.03% 2.05 kB 2.23 kB +3.48% 0.78 kB 0.80 kB
oss-experimental/react-server/cjs/react-server-flight.development.js +1.20% 120.88 kB 122.33 kB +0.86% 22.32 kB 22.52 kB
oss-stable-semver/react-server/cjs/react-server-flight.development.js +1.05% 113.03 kB 114.22 kB +0.73% 20.92 kB 21.07 kB
oss-stable/react-server/cjs/react-server-flight.development.js +1.05% 113.03 kB 114.22 kB +0.73% 20.92 kB 21.07 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.development.js +0.91% 159.71 kB 161.16 kB +0.80% 29.56 kB 29.80 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.development.js +0.88% 163.76 kB 165.21 kB +0.78% 30.09 kB 30.32 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js +0.86% 167.55 kB 168.99 kB +0.77% 30.93 kB 31.17 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js +0.86% 168.09 kB 169.54 kB +0.78% 31.06 kB 31.30 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js +0.84% 171.61 kB 173.05 kB +0.73% 31.49 kB 31.72 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js +0.84% 171.63 kB 173.08 kB +0.72% 31.48 kB 31.71 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +0.81% 175.35 kB 176.78 kB +0.78% 32.60 kB 32.85 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.development.js +0.79% 180.02 kB 181.44 kB +0.71% 33.06 kB 33.30 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.development.js +0.78% 151.84 kB 153.02 kB +0.52% 28.14 kB 28.29 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.development.js +0.78% 151.84 kB 153.02 kB +0.52% 28.14 kB 28.29 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js +0.76% 186.85 kB 188.28 kB +0.71% 34.14 kB 34.38 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.development.js +0.76% 155.54 kB 156.73 kB +0.52% 28.64 kB 28.79 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.development.js +0.76% 155.54 kB 156.73 kB +0.52% 28.64 kB 28.79 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js +0.76% 188.00 kB 189.43 kB +0.72% 34.43 kB 34.68 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +0.76% 188.06 kB 189.48 kB +0.72% 34.44 kB 34.69 kB
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +0.74% 156.31 kB 157.47 kB +0.53% 29.00 kB 29.16 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +0.74% 156.31 kB 157.47 kB +0.53% 29.00 kB 29.16 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js +0.74% 159.68 kB 160.86 kB +0.46% 29.54 kB 29.67 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js +0.74% 159.68 kB 160.86 kB +0.46% 29.54 kB 29.67 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js +0.74% 160.22 kB 161.41 kB +0.42% 29.67 kB 29.79 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js +0.74% 160.22 kB 161.41 kB +0.42% 29.67 kB 29.79 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js +0.73% 163.39 kB 164.57 kB +0.51% 30.03 kB 30.18 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js +0.73% 163.39 kB 164.57 kB +0.51% 30.03 kB 30.18 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js +0.73% 163.41 kB 164.60 kB +0.52% 30.01 kB 30.17 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js +0.73% 163.41 kB 164.60 kB +0.52% 30.01 kB 30.17 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.development.js +0.72% 160.98 kB 162.14 kB +0.52% 29.45 kB 29.61 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.development.js +0.72% 160.98 kB 162.14 kB +0.52% 29.45 kB 29.61 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js +0.69% 167.81 kB 168.98 kB +0.52% 30.51 kB 30.67 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js +0.69% 167.81 kB 168.98 kB +0.52% 30.51 kB 30.67 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js +0.69% 168.96 kB 170.13 kB +0.52% 30.81 kB 30.97 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js +0.69% 168.96 kB 170.13 kB +0.52% 30.81 kB 30.97 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +0.69% 169.02 kB 170.18 kB +0.52% 30.83 kB 30.99 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +0.69% 169.02 kB 170.18 kB +0.52% 30.83 kB 30.99 kB
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.development.js +0.52% 98.61 kB 99.13 kB +0.29% 18.69 kB 18.74 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.development.js +0.52% 98.66 kB 99.18 kB +0.30% 18.71 kB 18.77 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-client.browser.development.js +0.52% 98.97 kB 99.48 kB +0.31% 18.65 kB 18.71 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-client.browser.development.js +0.52% 99.02 kB 99.53 kB +0.31% 18.67 kB 18.73 kB
oss-stable-semver/react-client/cjs/react-client-flight.development.js +0.52% 100.29 kB 100.81 kB +0.29% 18.44 kB 18.49 kB
oss-stable/react-client/cjs/react-client-flight.development.js +0.52% 100.31 kB 100.83 kB +0.30% 18.46 kB 18.52 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.development.js +0.51% 100.79 kB 101.31 kB +0.29% 19.08 kB 19.14 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.development.js +0.51% 100.84 kB 101.36 kB +0.29% 19.10 kB 19.16 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js +0.51% 101.35 kB 101.87 kB +0.29% 19.22 kB 19.27 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js +0.51% 101.40 kB 101.92 kB +0.29% 19.24 kB 19.30 kB
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-client.node.development.js +0.50% 103.27 kB 103.78 kB +0.30% 19.47 kB 19.53 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-client.node.development.js +0.50% 103.27 kB 103.78 kB +0.30% 19.47 kB 19.53 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-client.edge.development.js +0.49% 104.56 kB 105.07 kB +0.28% 19.79 kB 19.85 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-client.edge.development.js +0.49% 104.56 kB 105.07 kB +0.28% 19.79 kB 19.85 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-client.node.development.js +0.49% 105.80 kB 106.31 kB +0.27% 19.95 kB 20.00 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-client.node.development.js +0.49% 105.80 kB 106.31 kB +0.27% 19.95 kB 20.00 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.development.js +0.48% 107.65 kB 108.17 kB +0.26% 20.28 kB 20.33 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.development.js +0.48% 107.65 kB 108.17 kB +0.26% 20.28 kB 20.33 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.development.js +0.48% 107.74 kB 108.26 kB +0.26% 20.31 kB 20.36 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.development.js +0.48% 107.74 kB 108.26 kB +0.26% 20.31 kB 20.36 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.development.js +0.48% 108.72 kB 109.24 kB +0.25% 20.45 kB 20.50 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.development.js +0.48% 108.72 kB 109.24 kB +0.25% 20.45 kB 20.50 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.development.js +0.47% 111.08 kB 111.59 kB +0.26% 20.68 kB 20.74 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.development.js +0.47% 111.08 kB 111.59 kB +0.26% 20.68 kB 20.74 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.development.js +0.46% 112.41 kB 112.92 kB +0.25% 20.94 kB 20.99 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.development.js +0.46% 112.41 kB 112.92 kB +0.25% 20.94 kB 20.99 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.development.js +0.45% 116.16 kB 116.68 kB +0.18% 21.72 kB 21.76 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-client.browser.development.js +0.45% 116.51 kB 117.04 kB +0.24% 21.64 kB 21.69 kB
oss-experimental/react-client/cjs/react-client-flight.development.js +0.45% 117.81 kB 118.33 kB +0.20% 21.48 kB 21.52 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.development.js +0.45% 118.34 kB 118.87 kB +0.24% 22.11 kB 22.16 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js +0.44% 118.90 kB 119.43 kB +0.17% 22.25 kB 22.29 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-client.node.development.js +0.44% 120.75 kB 121.28 kB +0.18% 22.50 kB 22.54 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-client.edge.development.js +0.43% 122.04 kB 122.57 kB +0.18% 22.85 kB 22.89 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-client.node.development.js +0.43% 123.28 kB 123.81 kB +0.17% 22.98 kB 23.02 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.development.js +0.42% 125.14 kB 125.67 kB +0.18% 23.35 kB 23.40 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.development.js +0.42% 125.23 kB 125.76 kB +0.18% 23.39 kB 23.43 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.development.js +0.42% 126.21 kB 126.74 kB +0.17% 23.48 kB 23.53 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.development.js +0.41% 128.56 kB 129.09 kB +0.17% 23.72 kB 23.76 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.development.js +0.41% 129.89 kB 130.42 kB +0.18% 23.98 kB 24.02 kB
oss-stable-semver/react-server-dom-esm/esm/react-server-dom-esm-client.browser.development.js +0.36% 137.08 kB 137.58 kB +0.29% 32.20 kB 32.29 kB
oss-stable/react-server-dom-esm/esm/react-server-dom-esm-client.browser.development.js +0.36% 137.11 kB 137.60 kB +0.29% 32.23 kB 32.32 kB
oss-experimental/react-markup/cjs/react-markup.react-server.development.js +0.33% 590.89 kB 592.85 kB +0.24% 105.65 kB 105.90 kB
oss-experimental/react-server-dom-esm/esm/react-server-dom-esm-client.browser.development.js +0.32% 154.30 kB 154.79 kB +0.25% 36.03 kB 36.12 kB

Generated by 🚫 dangerJS against e865e01

@sebmarkbage
Copy link
Collaborator Author

One thing to consider here is that calling .then may have unexpected side effects.

It can also hide unhandled promise rejections. Adding two then listeners before it has a chance to run its downstream listeners can break async stack traces.

So we might want to do something about the timing of when or if we call .then.

@sebmarkbage
Copy link
Collaborator Author

One issue is that if you pass a Promise as props, and then await it later. It will have already been serialized in a halted form because we don't wait for the second time it occurs. It would probably be better to wait until the end of the stream to read all the promises in one tick.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
CLA Signed React Core Team Opened by a member of the React Core Team
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants