Really though, you’re over focusing on the CPU part. The IO part is much more interesting.
(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.
You mean returning unresolved promises? Or returning rejected promises? Or just throwing an error?
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.
It's akin to doing `Header( LoginLink( GetLoginName() ) )` versus
``` Header(); check_for_interrupt(); LoginLink(); check_for_interrupt(); ... ```
The interrupt between rendering components (pieces of work) can now cancel the whole render operation (because say, the parent component has now been updated / wants to be re-rendered), or can pause the render tree while something like a high-priority animation frame is rendered.