Статьи

Генератор событий в node.js

Генератор событий из одного класса запускает событие, которое могут прослушивать другие функции из других классов. Библиотеки предлагают реализации среды для публикации событий и их прослушивания.

На узле многие объекты могут излучать события.

Метод .on в генераторе событий —

Мы можем прослушивать эти события, вызывая один из этих объектов методом « on », передавая функцию обратного вызова. Файл ReadStream может генерировать событие « данные » каждый раз, когда есть данные, доступные для чтения.

Пример кода —

01
02
03
04
05
06
07
08
09
10
var fs = require('fs'); // get the fs module
var readStream = fs.createReadStream('/etc/passwd');
 
readStream.on('data', function(data) {
    console.log(data);
});
 
readStream.on('end', function() {
    console.log('file ended');
});

Здесь мы привязываемся к событиям « data » и « end » readStream, передавая функции обратного вызова для обработки каждого из этих случаев. Когда происходит одно из этих событий, readStream вызывает функцию обратного вызова.

Есть 2 способа сделать вышеуказанную операцию —

  1. Передать анонимную функцию
  2. Передайте имя функции для функции, доступной в текущей области, или переменную, содержащую функцию.

Метод .once —

Когда мы хотим, чтобы метод обратного вызова вызывался только один раз, мы используем это в нашей работе —

1
2
3
server.once('connection', function (stream) {
    console.log('We have our first call!');
});

Чтобы удалить все прослушиватели из текущего контекста, мы должны использовать функцию removeAllListeners.

Создание генератора событий —

Мы должны использовать пакет «events» в node.js.

Чтобы установить пакет событий, нам нужно выполнить —

1
npm install events

в среде node.js.

Чтобы инициализировать пакет Event, нам нужно написать —

1
2
var EventEmitterVar = require('events').EventEmitter,
util = require('util');

Теперь для того, чтобы класс имел функцию генерирования событий, нам нужно наследовать это для класса, что делается в приведенном ниже исходном коде —

1
2
3
4
5
var exampleEventEmitterClass = function() {
    console.log("The Class Constructor Example");
}
 
util.inherits(exampleEventEmitterClass, EventEmitterVar);

util.inherits настроит цепочку прототипов так, чтобы методы прототипа EventEmitterVar были доступны в экземплярах exampleEventEmitterClass.

Таким образом, экземпляры exampleEventEmitterClass могут генерировать события:

1
2
3
4
5
exampleEventEmitterClass.prototype.emitMethod = function() {
    console.log('before the emitevent');
    this.emit('emittedevent');
    console.log('after the emitevent');
}

Здесь мы излучаем событие под названием «emittedevent».

Теперь клиенты экземпляров exampleEventEmitterClass могут прослушивать событие «emittedevent» следующим образом:

1
2
3
4
var evtEmitInstance = new exampleEventEmitterClass();
evtEmitInstance.on('emittedevent', function() {
    console.log('We have got the functionality of Event Emitter');
});

Здесь мы получили пользовательское событие из класса и работаем в этом событии.

Теперь, если мы вызываем метод —

1
evtEmitInstance.emitMethod();

emittedEvent будет вызван.

Выше приведено краткое введение Event Emitter в node.js. Мы напишем больше об этом в следующих постах.

Ссылка: Event Emitter в node.js от нашего партнера по JCG Пияса Де в блоге Phlox Blog .