node-await-event-emitter
node-await-event-emitter copied to clipboard
await events library like EventEmitter
await-event-emitter
Note: node-await-event-emitter is just implements the series processing, If you need parallel case, Please use the package tapable which is used by webpack.
Await events library like EventEmitter
Why?
The concept of Webpack plugin has lots of lifecycle hooks, they implement this via EventEmitter. In the primitive events module on nodejs, the usage as follows
const EventEmitter = require('events')
const emitter = new EventEmitter()
emitter
.on('event', () => {
// do something *synchronously*
})
.emit('event', '...arguments')
The listener must be synchronous, that is way i wrote it.
And await-event-emitter support synchronous emitter magically :smile:
Installation
npm install --save await-event-emitter
Usage
const AwaitEventEmitter = require('await-event-emitter').default
const emitter = new AwaitEventEmitter()
const tick = () =>
new Promise((resolve) => {
setTimeout(() => {
console.log('tick')
resolve()
}, 1000)
})
emitter.on('event', async () => {
// wait to print
await tick()
})
async function run() {
// NOTE: it's important to `await` the reset process
await emitter.emit('event', '...arguments')
await emitter.emit('event', 'again')
// support emit it synchronously
emitter.emitSync('event', 'again')
}
run()
API
Class AwaitEventEmitter
-
addListener(event, listener)
: AwaitEventEmitter
alias:on
-
once(event, listener)
-
prependListener(event, listener)
: AwaitEventEmitter
alias:prepend
-
prependOnceListener(event, listener)
: AwaitEventEmitter
alias:prependOnce
-
removeListener(event, listener)
: AwaitEventEmitter
alias:off
-
listeners(event)
: [] -
emit(event, ...args)
: Promise.resolve(boolean)
emit listeners asynchronously, we recommended await it resolved the result -
emitSync(event, ...args)
: boolean emit listeners synchronously
Test
npm test
Contributing
- Fork it!
- Create your new branch:
git checkout -b feature-new
orgit checkout -b fix-which-bug
- Start your magic work now
- Make sure npm test passes
- Commit your changes:
git commit -am 'feat: some description (close #123)'
orgit commit -am 'fix: some description (fix #123)'
- Push to the branch:
git push
- Submit a pull request :)
Authors
This library is written and maintained by imcuttle, [email protected].
License
MIT - imcuttle 🐟