imcuttle / node-await-event-emitter

await events library like EventEmitter

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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

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 😄

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 🐟

About

await events library like EventEmitter

License:MIT License


Languages

Language:TypeScript 96.0%Language:JavaScript 4.0%