Description
Building on #14, I believe it's possible to eliminate the generator from RRC.
Right now, controllers rely on generators to resolve promises and to get access to the selectors and dispatch
. They use this
to access each other. A dance happens in RRC to convert those controller generator methods into vanilla methods.
The reason generators are used is that it allows us to retrieve a "property getter" function, which will return the latest version of the selectors. If the selectors were simple properties, they could be stale in callbacks within the controllers. I didn't want to wrap properties in functions so that they would be expliticly called to retrieve their values at time of use. I'm not sure I was aware of Javascript's getter mechanism, which allows for this without requiring the caller to explicitly invoke them. That inspired #14.
Once that is done, all that's left to do is efficiently get all of these getters and dispatch
on the controller instance. This seems extremely doable, and it's just a matter of choosing the right mechanism (mixin, Object.assign
, prototype
, whatever). And then, we'd just let the caller choose their preferred async mechanism, rather than baking co
into RRC.