### Platform Support
The following shows Event module APIs available for each platform.
| | Linux
(Ubuntu) | Raspbian
(Raspberry Pi) | NuttX
(STM32F4-Discovery) | TizenRT
(Artik053) |
| :---: | :---: | :---: | :---: | :---: |
| emitter.addListener | O | O | O | O |
| emitter.on | O | O | O | O |
| emitter.emit | O | O | O | O |
| emitter.once | O | O | O | O |
| emitter.removeListener | O | O | O | O |
| emitter.removeAllListeners | O | O | O | O |
# Events
IoT.js is based on event-driven programming where objects (called "emitters") periodically emit named events.
# Class: EventEmitter
The `events.EventEmitter` plays a role as base class for "emitters".
User application would not directly creates an instance of `EventEmitter` since `EventEmitter` is an abstract trait which defines its behavior and grants to sub-classes.
### new EventEmitter()
* Returns {events.EventEmitter}.
Returns with a new EventEmitter object.
**Example**
```js
var EventEmitter = require('events').EventEmitter;
var emitter = new EventEmitter();
```
### emitter.addListener(event, listener)
* `event` {string} The name of the event.
* `listener` {Function} The callback function.
* `args` {any}.
* Returns `emitter` {events.EventEmitter}.
It is an alias for `emitter.on(eventName, listener)`.
Adds the `listener` callback function to the end of the listener's list for the given `event`. No checks are made to see if the `listener` has already been added.
In case of multiple calls the `listener` will be added and called multiple times.
**Example**
```js
var EventEmitter = require('events').EventEmitter;
var emitter = new EventEmitter();
var eventSequence = '';
var listener1 = function() {
eventSequence += '2';
};
emitter.addListener('test', listener1);
emitter.addListener('test', listener1);
emitter.emit('test');
console.log(eventSequence); // prints '22'
```
### emitter.on(event, listener)
* `event` {string} The name of the event.
* `listener` {Function} The callback function.
* `args` {any}.
* Returns `emitter` {events.EventEmitter}.
Adds the `listener` callback function to the end of the listener's list for the given `event`. No checks are made to see if the `listener` has already been added.
In case of multiple calls the `listener` will be added and called multiple times.
**Example**
```js
var EventEmitter = require('events').EventEmitter;
var emitter = new EventEmitter();
emitter.on('event', function() {
console.log('emit event');
});
emitter.emit('event');
```
### emitter.emit(event[, args..])
* `event` {string} The name of the event.
* `args` {any}.
* Returns {boolean}.
Synchronously calls each of the listeners registered for the `event`, in the order they were registered, passing the supplied arguments to each.
Returns true if the event had listeners, false otherwise.
**Example**
```js
var EventEmitter = require('events').EventEmitter;
var emitter = new EventEmitter();
emitter.addListener('event', function() {
console.log('emit event');
});
emitter.emit('event'); // true
emitter.emit('not_an_event'); // false
```
### emitter.once(event, listener)
* `event` {string} The name of the event.
* `listener` {Function} The callback function.
* `args` {any}.
* Returns `emitter` {events.EventEmitter}.
Adds the `listener` as a one time listener for the `event`.
Using this method, it is possible to register a listener that is called at most once for a particular `event`.
The listener will be invoked only once, when the first `event` is emitted.
**Example**
``` js
var EventEmitter = require('events').EventEmitter;
var assert = require('assert');
var emitter = new EventEmitter();
var onceCnt = 0;
emitter.once('once', function() {
onceCnt += 1;
});
assert.equal(onceCnt, 0);
emitter.emit('once');
assert.equal(onceCnt, 1);
emitter.emit('once');
assert.equal(onceCnt, 1);
```
### emitter.removeListener(event, listener)
* `event` {string} The name of the event.
* `listener` {Function} The callback function.
* `args` {any}.
* Returns `emitter` {events.EventEmitter}.
Removes `listener` from the list of event listeners.
If you add the same `listener` multiple times, this removes only one instance of them.
**Example**
```js
var EventEmitter = require('events').EventEmitter;
var emitter = new EventEmitter();
var listener = function() {
console.log('listener');
};
emitter.addListener('event', listener);
emitter.removeListener('event', listener);
```
### emitter.removeAllListeners([event])
* `event` {string} The name of the event.
* Returns `emitter` {events.EventEmitter}.
Removes all listeners.
If `event` was specified, it only removes the listeners for that event.
**Example**
``` js
var EventEmitter = require('events').EventEmitter;
var emitter = new EventEmitter();
function removableListener() {
console.log("listener called");
}
emitter.addListener('event1', removableListener);
emitter.addListener('event2', removableListener);
emitter.addListener('event2', removableListener);
emitter.addListener('event3', removableListener);
emitter.removeAllListeners('event2');
var res = emitter.emit('event2'); // res == false
res = emitter.emit('event1'); // res == true, prints "listener called"
emitter.removeAllListeners();
res = emitter.emit('event1'); // res == false
res = emitter.emit('event3'); // res == false
```
### emitter.setMaxListeners(num)
* `num` {number} The max listener limit, default 7.
* Returns `emitter` {events.EventEmitter}.
Set the max listener limit, must be number and greater than 0.
### emitter.getMaxListeners()
* Returns {number} The max listener limit.
Get the max listener limit, must be number.
## Event: 'newListener'
* `eventName` {string} The name of the event being listened for.
* `listener` {Function} The event handler function.
The EventEmitter instance will emit its own 'newListener' event before a listener is added to its internal array of listeners.
Listeners registered for the 'newListener' event will be passed the event name and a reference to the listener being added.
The fact that the event is triggered before adding the listener has a subtle but important side effect: any additional listeners registered to the same name within the 'newListener' callback will be inserted before the listener that is in the process of being added.
```javascript
const myEmitter = new MyEmitter();
// Only do this once so we don't loop forever
myEmitter.once('newListener', (event, listener) => {
if (event === 'event') {
// Insert a new listener in front
myEmitter.on('event', () => {
console.log('B');
});
}
});
myEmitter.on('event', () => {
console.log('A');
});
myEmitter.emit('event');
// Prints:
// B
// A
```
## Event: 'removeListener'
* `eventName` {string} The name of the event being listened for.
* `listener` {Function} The event handler function.
The EventEmitter instance will emit its own 'removeListener' event after a listener is removed.
```javascript
var EventEmitter = require('events').EventEmitter;
var bus = new EventEmitter();
function noop() {}
bus.on('foobar', noop);
bus.on('removeListener', function(event, fn) {
console.log('event "foobar" is removed');
});
bus.removeListener('foobar', noop);
// Prints:
// event "foobar" is removed
```