Emit a single event for a collection of events
npm install single-emitSmall super light-weight concise module with no dependencies to listen for events on an EventEmitter instance and emit a single event when all events have been emitted. Think of it as a Promise.all, but for events.
With support for Objects and Arrays
npm install --save single-emit``js
const fs = require('fs')
const EmitOnce = require('single-emit')
const myObjectOfStreams = {
stream1: fs.createReadStream('./myFile1.txt'),
stream2: fs.createReadStream('./myFile2.txt'),
stream3: fs.createReadStream('./myFile3.txt'),
}
// listen for the 'end' event
const emitOnce = new EmitOnce(myObjectOfStreams, 'end')
emitOnce.on('end', () => {
// All streams have emitted the 'end' event
})
`
If you expect your events to fire with data, the collection of data is passed to the callback as an array or an object. If the collection of events is an array, the data passed to the callback is in the same order as the array passed in, not in the order the events were emitted. If the collection is an object, the data is simply mapped to the keys of the object.
For another contrived example:
`js
const fs = require('fs')
const EmitOnce = require('single-emit')
const stream1 = fs.createReadStream('./myFile1.txt')
const stream2 = fs.createReadStream('./myFile2.txt')
const stream3 = fs.createReadStream('./myFile3.txt')
const myArrayOfStreams = [stream1, stream2, stream3]
const emitOnce = new EmitOnce(myArrayOfStreams, 'data')
emitOnce.on('data', (data) => {
// All streams have emitted the 'data' event once
// data contains an array of data from the streams`
console.log(data[0]) // -> stream1 data
console.log(data[1]) // -> stream2 data
console.log(data[2]) // -> stream3 data
})
: A collection of event emitters which could be an array of or an object
- event: The event to listen for. This could be any string or Symbol`. Note that if you listen for the error event, this would be emitted once any item emits an error and does not wait on others.[travis]: https://travis-ci.org/wizzy25/single-emit
[travis-icon]: https://img.shields.io/travis/wizzy25/single-emit/master.svg?style=flat-square
[david-dev]: https://david-dm.org/wizzy25/single-emit#info=devDependencies
[david-dev-icon]: https://img.shields.io/david/dev/wizzy25/single-emit.svg?style=flat-square