Extends events with async for better flow
Extends events with async for better flow
const LikeEmitter = require('like-events');
const emitter = new LikeEmitter();
emitter.on('change', async function () {
await sleep(1000);
return true;
});
emitter.on('change', async function () {
await sleep(1000);
return false;
});
// it just takes 1s
emitter.emitAll('change').then(console.log); // [true, false]
// util
function sleep (ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
npm i like-events
Extension of native events module (EventEmitter).\
Useful for async operations.
like.emitSync(event: String, ...args): Array
like.emitAll(event: String, ...args): Promise->Array
like.emitSeq(event: String, ...args): Promise->Array
emitter.on('update', function () {
return true;
});
emitter.on('update', function () {
return false;
});
console.log(emitter.emitSync('update'));
[true, false]
emitter.on('change', async function () {
console.log('change A1');
await sleep(1000);
console.log('change A2');
return true;
});
emitter.on('change', async function () {
console.log('change B1');
await sleep(1000);
console.log('change B2');
return false;
});
console.log(await emitter.emitAll('change'));
change A1
change B1
sleep +1s
change A2
change B2
[true, false]
emitter.on('processing', async function () {
console.log('processing A');
await sleep(1000);
return 49;
});
emitter.on('processing', async function () {
console.log('processing B');
return 51;
});
console.log(await emitter.emitSeq('processing'));
processing A
sleep +1s
processing B
[49, 51]
npm test
Feedback, ideas, etc are very welcome so feel free to open an issue.
Code released under the MIT License.