event-kit v2.5.3
event-kit
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())
5 years ago
6 years ago
6 years ago
6 years ago
7 years ago
7 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago