Всем привет! В этом материале рассмотрим, как работает обработчик событий в NodeJS .

NodeJS. Обработчик событий.

Всем привет! В этом материале рассмотрим, как работает обработчик событий в NodeJS.

В прошлой статье мы рассмотрели, как писать и подключать свои модули в платформу, но помимо этого в самом NodeJS уже встроено множество разных модулей, которые мы можем просто подключить и использовать их функционал.

Давайте подключим модуль:

// файл app.js
var events = require('events');

Давайте рассмотрим конструктор EventEmitter.

var myEmitter = new events.EventEmitter();

Теперь мы можем использовать функционал событий. Например, вот так:

myEmitter.on('someEvent', function(message) {
  console.log(message);
});

Когда случится событие someEvent, вызовется функция, которая выведет переданное в нее сообщение.

Чтобы вызвать событие, мы должны написать следующее:

myEmitter.emit('someEvent', 'сообщение');

Метод emit принимает первым параметром событие, которое должно быть вызвано, а потом все необходимые аргументы. В нашем случае это сообщение.

Рассмотрим более интересный пример. Для этого нам нужно подключить еще один модуль с утилитами.

var util = require('util');

Создадим объект:

var Person = function(name) {
  this.name = name;
};

Допустим, что теперь мы хотим, чтобы все объекты Person наследовали EventEmitter. Для этого нужно сделать следующее:

util.inherits(Person, events.EventEmitter);

var james = new Person('James');
var mary = new Person('Mary');
var ryu = new Person('Ryu');
var people = [james, mary, ryu];

people.forEach(function(person) {
  person.on('speak', function(message) {
   console.log(person.name + " сказал: " + message);
  });
});

james.emit('speak', 'Всем привет!');

Здесь мы сначала используем метод inherits у модуля util, чтобы Person начал наследовать EventEmitter, потом создаем несколько объектов Person, создаем переменную, куда помещаем все ссылки на объекты, затем в цикле перебираем весь массив и каждому вешаем событие speak, при вызове которого должна вызваться функция, которая выведет имя, а затем текст сообщения. Чтобы вызвать событие, мы используем уже известный нам метод emit.

А на этом сегодня все. Спасибо за внимание!