await-event-emitter

Await events library like EventEmitter

Usage no npm install needed!

<script type="module">
  import awaitEventEmitter from 'https://cdn.skypack.dev/await-event-emitter';
</script>

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 🐟