Comments (7)
Maybe I don't understand this correctly, but how would one unsubscribe from these events?
from emittery.
By breaking out of the loop.
But I don't think it's a good fit. Emitter push data, while you pull data from an Iterator. To work the emitter would have to either queue events or to skip events emitted while the async loop block is getting processed.
from emittery.
@dinoboff It would queue events. That's how Emittery works already though, as events are emitted async, so they're placed on the event loop (queue). It's probably not useful for the common case, true, but sometimes I just want to gather a certain amount of events from an emitter or all, and then iterating like this would be a nice way of handling it.
from emittery.
Weak references would allow the iterator to be garbage collected, and thus the queue as well. Support for that is probably still a long way off though.
from emittery.
@sindresorhus they are queued to some extends but the queue get flushed on the next tick whether the consumer is ready or not.
from emittery.
@bvx89 It would be something like that
function iterator(emitter, eventName) {
return {
async *[Symbol.asyncIterator]() {
const queue = [];
const off = emitter.on(eventName, (data) => queue.push(data));
try {
while (true) {
if (queue.length == 0) {
await emitter.once(eventName);
}
yield queue.shift();
}
} finally {
// Called once the iterator result `return` or `throw` methods are called;
// e.g. if the loop block `break` or `throw`.
off();
}
}
}
}
from emittery.
Fixed by #40
from emittery.
Related Issues (20)
- Possible memory-leak in bindMethods
- ReferenceError: exports is not defined in ES module scope HOT 1
- `globalThis.process` references DOM elements with a `#process` ID and crashes app
- [Question] Is it safe to override `emit`? HOT 1
- `yarn test` fails
- Pure ems bundle prevents emittery usage in libraries/frameworks HOT 2
- Wrong listener count for Symbol event names
- Question: Does this works across tabs? HOT 1
- Support AbortController
- v0.9.0 throws a reference error on browser bundles HOT 2
- Uncaught TypeError: Cannot read property 'has' of undefined HOT 4
- Typescript error while trying to listen to multiple events HOT 1
- Arbitrary listener return type (Typescript) HOT 1
- `emit('eventName')` returns as `emit(undefined)` HOT 2
- Fix type compatibility with `p-event`
- No way to prepend listeners or run listeners in reversed order in emit
- `export = Emittery` might not be correct? HOT 1
- Enabling debug can cause circular reference error HOT 3
- Regresssion in PR#96 HOT 4
- No way to unsubscribe from `once` HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from emittery.