3 ms·
An operation may take longer than a single tick of the event loop, and may have it's own rules regarding state transitions. To be clear, I'm not saying "don't
by joeycumines 3y ago
An operation may take longer than a single tick of the event loop, and may have it's own rules regarding state transitions.
To be clear, I'm not saying "don't do any communication by sharing state", just that there are use cases where it's possible to make it much simpler to reason about.
As an example, you might control the state of "making a HTTP request to perform a search", within the frontend of a single page app that has a map, search filters, and results.
One strategy is to use a buffered channel (1 element), and, when the search filters are updated, drain then re-send the request to the channel.
The logic processing these requests would then just need to sit there, iterating on / receiving from the channel. It could also support cancellation, if that was desired.
(I'd imagine the results would be propagated via some other mechanism, e.g. to a store implementation)
- pyrolistical 3y agoSounds like a generator then?
- joeycumines 3y agoGenerators have lots of really nice uses, yep. I'm not sure what specifically you were imagining, but I've added an example of how "vanilla JS" can achieve fan-in, using an AsyncGenerator: https://github.com/joeycumines/ts-chan/blob/main/docs/pattern-fan-in.md#without-ts-chan https://github.com/joeycumines/ts-chan/blob/main/docs/patter... It uses one of the patterns suggested in a comment chain above, which I think is pretty neat, and wasn't one that readily occurred to me: https://news.ycombinator.com/item?id=38163562 https://news.ycombinator.com/item?id=38163562 I'm not making a case for using ts-chan for any situation where a simple generator-based solution suffices. I wouldn't call the example solution (in my first link) simple, but it's something I'd personally be ok with maintaining. Like, I'd approve a PR containing something similar without significant qualms, _if_ there was a significant enough motivator, and it was sufficiently unit tested. I might suggest `ts-chan` as an alternative, to make it easier to maintain, but wouldn't be particularly concerned either way. That's all very subjective, though :)