Awesome
emitterator
Async iterator to event emitter
Install
npm i emitterator
Usage
const Emitterator = require('emitterator')
const emitter = new Emitterator(asyncIterator(), {
// custom emitted event name
eventName: 'value',
// optionally transform the value after the iterator yields it
transformValue: async v => asyncOperation(v)
})
// emitted for every value in the iterator
emitter.on('value', v => console.log('got value', v))
// emitted only once if the iterator throws
emitter.on('error', err => console.error('error in iterator', err))
// always emitted on end, even after error or cancel
emitter.on('end', () => console.log('iterator finished'))
// cancel the iteration AFTER the next value is emitted
emitter.cancel() // returns a promise so can be awaited
API
new Emitterator(iterator, [options])
Create a new event emitter for the passed async iterator.
For example iterator
might be something like:
async function * count () {
let n = 0
while (true) {
// Sleep for a bit
await new Promise((resolve, reject) => setTimeout(resolve, 100)
yield n
n++
}
}
// create a new emitter to emit values from the `count` iterator
const emitter = new Emitterator(count())
emitter.on('value', console.log) // logs 0, 1, 2, 3 ...
options
is an optional object that may contain the following properties:
eventName
(string) A custom name for the event emitted when the iterator yields a valuetransformValue
(function) A (async) function that can be used to transform the value yielded by the iterator before it is emitted
emitter.cancel(): Promise
Cancel the iteration after the next value is yielded from the iterator. After calling cancel, the emitter may emit one more value
event followed by an end
event.
Returns a Promise
to allow you to await
for cancel to complete.
Events
value
Emitted when the iterator yields a value. If eventName
is passed in options then this will be the name of this event instead.
error
Emitted if the iterator throws an error. This is not recoverable so iteration will stop. After the error
event is emitted the end
event will be emitted.
end
Emitted when there are no more values in the iterator (may never be called if the iterator is infinite). It is also emitted after an error
event is emitted or if emitter.cancel()
is called.
Contribute
Feel free to dive in! Open an issue or submit PRs.
License
MIT © Alan Shaw