Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/martinheidegger/has-listener

Change behavior of a Node.js EventEmitter depending on the existence of a listener.
https://github.com/martinheidegger/has-listener

event-emitter events nodejs observer-effect

Last synced: about 4 hours ago
JSON representation

Change behavior of a Node.js EventEmitter depending on the existence of a listener.

Awesome Lists containing this project

README

        

# has-listener

Build Status
[![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com)
[![Maintainability](https://api.codeclimate.com/v1/badges/fe7f58777d60b93f2e42/maintainability)](https://codeclimate.com/github/martinheidegger/has-listener/maintainability)
[![Test Coverage](https://api.codeclimate.com/v1/badges/fe7f58777d60b93f2e42/test_coverage)](https://codeclimate.com/github/martinheidegger/has-listener/test_coverage)

`has-listener` is a little util, useful in combination with [`EventEmitter`][events].
It allows to do some operation only if an event listener is added to an emitter.

[events]: https://nodejs.org/api/events.html#events_class_eventemitter

`npm i has-listener --save`

### Why

Let's embrace the [Observer Effect][observer-effect]! 👀 With this little tool you can
let your classes do different things depending on whether there is an observer or not.

[observer-effect]: https://en.wikipedia.org/wiki/Observer_effect_(physics)

### Usage

```js
const { hasListener } = require('has-listener')
const { EventEmitter } = require('events')

const emitter = new EventEmitter()

function onHasListener (hasListener) {
console.log(`hasListener: ${hasListener}`)
}

const stop = hasListener(emitter, 'loop', onHasListener) // hasListener: false

emitter.on('loop', () => {}) // hasListener: true
emitter.removeAllListeners() // hasListener: false

stop() // stops updating

emitter.on('loop', () => {}) // nothing, because stop was called.
```

### License

[MIT](./LICENSE)