Giter Club home page Giter Club logo

better-events's Introduction

BetterEvents

An improved version of the Node.js EventEmitter.

Build Status Test Coverage

bitHound Code bitHound Overall Score bitHound Dependencies bitHound Dev Dependencies License: MIT

Installation

npm i better-events --save

Changes

  • v3.0.0
  • v2.0.0
    • Promises for the "error" event will now be rejected when an error is emitted.

Class: BetterEvents

The BetterEvents constructor extends the default Node.js EventEmitter.

For more information on the EventEmitter see the Node.js docs: https://nodejs.org/api/events.html

Here are the specs for the new methods of BetterEvents.

BetterEvents.once(source, eventName[, arrayMode])

  • source <EventEmitter> The source for the Event.
  • eventName <String> | <Symbol> The name of the event.
  • arrayMode <Boolean> resolve the promise with an array containing all arguments of the event

Returns a <Promise> that gets resolved with the first argument of the event. It gets resolved when the source emits the event. If the eventName is "error" then the promise gets rejected as soon as an error is emitted.

const { once } = require('better-events')

async function read() {
  const readstream = fs.createReadStream('example.txt')

  let text = ''
  readstream.on('data', chunk => {
    text += chunk
  })

  // Await the "close" event.
  await once(readstream, 'close')

  // Log the contents of the file.
  console.log('text:', text)
}

read()

BetterEvents.shareEvent(eventName, source, target, once)

  • eventName <String> | <Symbol> The name of the event.
  • source <EventEmitter> the EventEmitter that emits the event.
  • target <EventEmitter> The EventEmitter to share the event with.
  • once <Boolean> Share the event only once.

Returns the listener that has been applied to the source so one can use .removeListener().

This method allows you to share events. If the event gets emitted on the source, it also gets emitted on the target. This works only one way. If the shared event gets emitted on the target, it is not emitted on the source.

const {
  BetterEvents,
  shareEvent
} = require('better-events')

const emitter1 = new BetterEvents()
const emitter2 = new BetterEvents()

shareEvent('hello', emitter1, emitter2)

emitter2.on('hello', () => console.log('received event'))

emitter1.emit('hello')
// "received event" will be logged.

emitter.once(eventName[, listener])

  • eventName <String> | <Symbol> The name of the event.
  • listener <Function> | <Boolean> callback function

Like the original method (see: https://nodejs.org/api/events.html#events_emitter_once_eventname_listener) with exceptions.

If no callback is provided the method returns a <Promise> that resolves with the first argument of the event when the event is fired. If the eventName is "error" then the promise gets rejected as soon as an error is emitted.

If one provides true instead of the callback the array mode gets activated. The method returns a <Promise> which resolves with an array containing all the arguments of the event. It gets resolved when the event is fired.

const BetterEvents = require('better-events')

// Create your own class that extends BetterEvents.
class Seconds extends BetterEvents {
  constructor() {
    setInterval(() => {
      this.emit('second')
    }, 1000)
  }
}

// Create an instance of your class.
const example = new Seconds()

// Get a promise for the 'second' event.
example.once('second').then(() => {
  console.log('one second has passed')
})

emitter.collect(eventName, source)

  • eventName <String> | <Symbol> The name of the event.
  • source <EventEmitter> The source for the Event.

Returns the listener that has been applied to the source so one can use .removeListener().

When the event specified by the eventName gets fired at the source it will also be emitted on this instance.

emitter.collectOnce(eventName, source)

  • eventName <String> | <Symbol> The name of the event.
  • source <EventEmitter> The target for the Event.

Returns the listener that has been applied to the source so one can use .removeListener().

Similar to emitter.collect() but works only once.

emitter.share(eventName, target)

  • eventName <String> | <Symbol> The name of the event.
  • target <EventEmitter> The target for the Event.

Returns the listener that has been applied to the source so one can use .removeListener().

When the event specified by the eventName gets fired at this instance it will also be emitted on the target.

emitter.shareOnce(eventName, target)

  • eventName <String> | <Symbol> The name of the event.
  • target <EventEmitter> The target for the Event.

Returns the listener that has been applied to the source so one can use .removeListener().

Similar to emitter.share() but works only once.

better-events's People

Contributors

dependabot[bot] avatar robojones avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.