mirror of
https://github.com/zebrajr/react.git
synced 2025-12-06 00:20:04 +01:00
Stacked on #33588, #33589 and #33590. This lets us automatically show the resolved value in the UI. <img width="863" alt="Screenshot 2025-06-22 at 12 54 41 AM" src="https://github.com/user-attachments/assets/a66d1d5e-0513-4767-910c-5c7169fc2df4" /> We can also show rejected I/O that may or may not have been handled with the error message. <img width="838" alt="Screenshot 2025-06-22 at 12 55 06 AM" src="https://github.com/user-attachments/assets/e0a8b6ae-08ba-46d8-8cc5-efb60956a1d1" /> To get this working we need to keep the Promise around for longer so that we can access it once we want to emit an async sequence. I do this by storing the WeakRefs but to ensure that the Promise doesn't get garbage collected, I keep a WeakMap of Promise to the Promise that it depended on. This lets the VM still clean up any Promise chains that have leaves that are cleaned up. So this makes Promises live until the last Promise downstream is done. At that point we can go back up the chain to read the values out of them. Additionally, to get the best possible value we don't want to get a Promise that's used by internals of a third-party function. We want the value that the first party gets to observe. To do this I had to change the logic for which "await" to use, to be the one that is the first await that happened in user space. It's not enough that the await has any first party at all on the stack - it has to be the very first frame. This is a little sketchy because it relies on the `.then()` call or `await` call not having any third party wrappers. But it gives the best object since it hides all the internals. For example when you call `fetch()` we now log that actual `Response` object. |
||
|---|---|---|
| .. | ||
| art | ||
| attribute-behavior | ||
| concurrent/time-slicing | ||
| devtools | ||
| dom | ||
| eslint-v6 | ||
| eslint-v7 | ||
| eslint-v8 | ||
| eslint-v9 | ||
| expiration | ||
| fiber-debugger | ||
| fizz | ||
| fizz-ssr-browser | ||
| flight | ||
| flight-esm | ||
| flight-parcel | ||
| legacy-jsx-runtimes | ||
| nesting | ||
| owner-stacks | ||
| packaging | ||
| scheduler | ||
| ssr | ||
| ssr2 | ||
| stacks | ||
| view-transition | ||