Repository URL to install this package:
Version:
1.60.0 ▾
|
.. |
.github |
dist |
LICENSE.md |
README.md |
api.json |
appveyor.yml |
package.json |
This is a simple library for 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.
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()
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())