5 ms·
Looking good and informative, but to be honest I am really interested in use cases. I think I understand how to use generators but I have no idea where I could
by ponyous 11y ago
Looking good and informative, but to be honest I am really interested in use cases. I think I understand how to use generators but I have no idea where I could use them in real-world scenarios. Same goes for WeakMaps, Proxies...
Anyone care to give some examples?
- heifer2822 11y agocheckout Koa to see a great use case of generators. By yielding to asychronous code (instead of callbacks) you can write JS that looks like it's synchronous.
- NikolaeVarius 11y agoWhat is the advantage of using generators versus promises?
- callahad 11y agoIn this case, Koa uses generators and promises together to emulate the behavior of async/await style concurrency. You can see how Babel 5.x transforms ES7 async/await into generators and promises at https://github.com/babel/babel/blob/v5.8.34/packages/babel/src/transformation/templates/helper-async-to-generator.js https://github.com/babel/babel/blob/v5.8.34/packages/babel/s...
- chowes 11y agohttp://stackoverflow.com/a/28032438 http://stackoverflow.com/a/28032438 gives a great overview to the pros and cons of both approaches.
- chowes 11y agoCheck out http://jlongster.com/A-Study-on-Solving-Callbacks-with-JavaScript-Generators http://jlongster.com/A-Study-on-Solving-Callbacks-with-JavaS... and the follow up post. It's easy enough to start using generators alongside your existing async solution (callbacks or promises). Proxies can be used for data-binding, similar to Object.observe. I've also yet to find a case where I need WeakMaps instead of an Object or Map. All the benefits seem to be a bit too theoretical, but I likely haven't dug into it hard enough.
- danielnaab 11y agoI've used a WeakMap for a kind of memoization. Assume an immutable object may undergo an expensive transform that returns an object, which is then stored in a WeakMap keyed to the immutable. When there are no new references to that object, the garbage collector will clean it up, but otherwise the expensive transform may be avoided with a lookup on the WeakMap. It provides a pretty nice way to decouple your caching from the rest of the codebase.
- slasaus 11y agoI'm currently using Proxy to transparently version data that is saved in an IndexedDB.
- _greim_ 11y agoToo many use cases to list, but generally a nice way to for...of anything, for example a recursive binary tree traversal: [Symbol.iterator]() { if (this.left) { yield* this.left[Symbol.iterator](); } yield this.value; if (this.right) { yield* this.rightSymbol.iterator](); } } ... for (const value of myTree) { ... }