1.0.0 • Published 5 years ago
queue-emitter v1.0.0
Queue Emitter
Emit events in series, rather than in parallel Functions can be asynchronous (next function will start after the first function's Promise resolves) Functions can halt the emitter
Note: values returned by the functions are ignored. The arguments passed are the ones passed into the emit function
Usage
2 Functions, One asynchronous
const emitter = new QueueEmitter();
function callback1(obj) {
obj.key1 = 'val1';
}
async function callback2(obj) {
return new Promise(async function(resolve, reject) {
setTimeout(() => {
obj.key2 = 'val2';
resolve();
}, 100);
});
}
emitter.on('eventname', callback1);
emitter.on('eventname', callback2);
let obj = {
key0: 'val0'
};
await emitter.emit('eventname', obj);
if(obj.key0 !== 'val0' || obj.key1 !== 'val1' || obj.key2 !== 'val2')
throw new Error('values not set properly');
Reject in one callback
const emitter = new QueueEmitter();
function callback1(obj) {
obj.key1 = 'val1';
}
async function callback2(obj) {
throw new Error('some_error')
}
emitter.on('eventname', callback1);
emitter.on('eventname', callback2);
try {
await emitter.emit('eventname', {});
}
catch(error) {
if(error.message !== 'some_error')
throw error;
}
Useage with 'once'
const emitter = new QueueEmitter();
let triggered = false;
function callback1(obj) {
if(triggered)
throw new Error('previously_triggered');
triggered = true;
}
emitter.once('eventname', callback1);
await emitter.emit('eventname', {});
await emitter.emit('eventname', {});