3 ms·
When you say "yield", you're talking about render functions throwing a Promise, right? Is there another kind of yield that arbitrary JS code people write in com
by jbaudanza 7y ago
When you say "yield", you're talking about render functions throwing a Promise, right? Is there another kind of yield that arbitrary JS code people write in components can do that I'm missing?
- danabramov 7y agoNo. I mean that we yield between calling different components. We can’t pause a giant blocking call in a render but we can amortise “death by a thousand cuts” across many components.
- erikpukinskis 7y agoRender functions, to my knowledge, can’t return a promise. (And you don’t throw a promise, you return and reject it) The issue at hand is fully synchronous render functions that, e.g., go through a giant list of objects and call a bunch of other render functions on each one synchronously. This change allows that one function to finish, and interaction to continue before all the children render.
- jbaudanza 7y agoThe new suspense API works by throwing Promises when the data isn't ready yet.
- erikpukinskis 7y agoI’m not sure what you mean by “throwing promises”... You mean returning unresolved promises? Or returning rejected promises? Or just throwing an error?
- acemarke 7y agoLiterally, _throwing_ a Promise. React will catch promises thrown during rendering, and treat that as a request to "suspend" the component and come back to it later once the promise has resolved.