2.5.3 • Published 5 years ago

event-kit v2.5.3

Weekly downloads
34,232
License
MIT
Repository
github
Last release
5 years ago

event-kit

OS X Build Status Windows Build Status Dependency Status

This is a simple library for implementing event subscription APIs.

Implementing Event Subscription APIs

const {Emitter} = require('event-kit')

class User {
  constructor() {
    this.emitter = new Emitter()
  }

  onDidChangeName(callback) {
    this.emitter.on('did-change-name', callback)
  }

  setName(name) {
    if (name !== this.name) {
      this.name = name
      this.emitter.emit('did-change-name', name)
    }

    return this.name
  }

  destroy() {
    this.emitter.dispose()
  }
}

In the example above, we implement ::onDidChangeName on the user object, which will register callbacks to be invoked whenever the user's name changes. To do so, we make use of an internal Emitter instance. We use ::on to subscribe the given callback in ::onDidChangeName, and ::emit in ::setName to notify subscribers. Finally, when the User instance is destroyed we call ::dispose on the emitter to unsubscribe all subscribers.

Consuming Event Subscription APIs

Emitter::on returns a Disposable instance, which has a ::dispose method. To unsubscribe, simply call dispose on the returned object.

const subscription = user.onDidChangeName((name) => console.log(`My name is ${name}`))
// Later, to unsubscribe...
subscription.dispose()

You can also use CompositeDisposable to combine disposable instances together.

const {CompositeDisposable} = require('event-kit')

const subscriptions = new CompositeDisposable()
subscriptions.add(user1.onDidChangeName((name) => console.log(`User 1: ${name}`))
subscriptions.add(user2.onDidChangeName((name) => console.log(`User 2: ${name}`))

// Later, to unsubscribe from *both*...
subscriptions.dispose()

Creating Your Own Disposables

Disposables are convenient ways to represent a resource you will no longer need at some point. You can instantiate a disposable with an action to take when no longer needed.

const {Disposable} = require('event-kit')

const disposable = new Disposable(() => this.destroyResource())
taxon-plugin-commands@genexus/gx-common@sahidmiller/text-buffer@everything-registry/sub-chunk-1622@white-matrix/ide-terminal-next@zalastax/nolb-event-@teletype-diy/teletype-diy-client@thetrg/text-buffer@taxon/plugin-commandsamdbutlerflow-language-serverflow-language-server-amasadflux-reducerfirst-matefirst-mate-asyncfirst-mate-prebuiltevent-fluxbasarat-text-buffer@axosoft/atom-keymap@axosoft/keyboard-layoutinkdrop-keyboard-layoutinkdrop-keymapinkdrop-localdb-extractinkdrop-pouchdb-transform-encryptionbirch-outlinehtml-significant-otherbootstrap-kit@atom/teletype-client@atom/watcherawly-code-highlighter@atom-ide-community/nuclide-watchman-helpers@atom-ide-community/nuclide-commons@whinc/xconsole@playlyfe/gql-language-server@sbspk/queue@pnidem/first-mateeasy-text-mate@soldair/first-mate@sahidmiller/atom-textbufferelectron-event-fluxelectron-kitxmail-exchangewiggzz-first-mategrimgrowth-watchatom-keymapatom-keymap-plasticityatom-nuclideatom-package-config-observeratom-utilsatom-highlightsjshadron-command-registrybig-digkeyboard-layoutcurvemw-event-fluxmeteor-pathwatcher-tweaksdata-observerdisposable-eventdom-listenerlive-service-hublive-staticlive-koa-serverreeventpathwatcherpathwatcher-without-runasscoped-property-storeservice-hubscrollbar-styleperfomon-monitor@jome/first-matesaito-asukaomgnuclidenuclide-commonsnuclide-debugger-hhvm-proxynuclide-path-searchnuclide-path-search-rxnuclide-text-buffernuclide-servernuclide-watchman-helpersnsync-fsohnogit@dhruvit_r/pathwatchercygnus-ide-dingding-projectcygnus-pluginserverlast-matemaya@genexus/designer-commonnode-tmlaguagenode-tmlanguagenode-gdbnode-nicovideo-apiplasticity-parasolid@inkdropapp/scoped-property-storeproject-plugin-tinyprefpps-keymapsqlite-ormsimple-text-buffer
2.5.3

5 years ago

2.5.2

6 years ago

2.5.1

6 years ago

2.5.0

6 years ago

2.4.0

7 years ago

2.3.0

7 years ago

2.2.0

8 years ago

2.1.0

8 years ago

2.0.0

8 years ago

1.5.1

8 years ago

1.5.0

8 years ago

1.4.1

9 years ago

1.4.0

9 years ago

1.3.0

9 years ago

1.2.0

9 years ago

1.1.1

9 years ago

1.1.0

9 years ago

1.0.3

9 years ago

1.0.2

9 years ago

1.0.1

9 years ago

1.0.0

9 years ago

0.8.2

9 years ago

0.8.1

9 years ago

0.8.0

10 years ago

0.7.2

10 years ago

0.7.1

10 years ago

0.7.0

10 years ago

0.6.0

10 years ago

0.5.0

10 years ago

0.4.0

10 years ago

0.3.0

10 years ago

0.2.0

10 years ago

0.1.0

10 years ago

0.0.0

10 years ago