await-event-emitter

Await events library like EventEmitter

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
await-event-emitter
21192.0.23 years ago6 years agoMinified + gzip package size for await-event-emitter in KB

Readme

await-event-emitter
Await events library like EventEmitter
build status Test coverage NPM version NPM Downloads

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 or git 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)' or git 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, imcuttle@163.com.

License

MIT - imcuttle 🐟