Что такое "эмитент событий"?
Просматривая http://microjs.com, я вижу множество библиотек с надписью "event emitters". Мне нравится думать, что я хорошо разбираюсь в основах JavaScript-кода, но я действительно не знаю, что такое "эмитент событий" или нет.
Кто-нибудь хочет просветить меня? Это звучит интересно...
Ответы
Ответ 1
Он запускает event, который может слушать любой. Различные библиотеки предлагают разные реализации и для разных целей, но основная идея заключается в создании основы для выпуска событий и подписки на них.
Пример из jQuery:
// Subscribe to event.
$('#foo').bind('click', function() {
alert("Click!");
});
// Emit event.
$('#foo').trigger('click');
Однако, с jQuery, чтобы испускать событие, вам нужно иметь объект DOM и не может генерировать события из произвольного объекта. Здесь случается, что событие-эмиттер становится полезным. Здесь некоторый псевдокод для демонстрации пользовательских событий (тот же самый шаблон, что и выше):
// Create custom object which "inherits" from emitter. Keyword "extend" is just a pseudo-code.
var myCustomObject = {};
extend(myCustomObject , EventEmitter);
// Subscribe to event.
myCustomObject.on("somethingHappened", function() {
alert("something happened!");
});
// Emit event.
myCustomObject.emit("somethingHappened");
Ответ 2
В node.js событие может быть описано просто как строка с соответствующим обратным вызовом. Событие может быть "испущено" (или, другими словами, вызов соответствующего вызова) несколько раз, или вы можете выбрать только прослушивание при первом исходе.
Пример: -
var example_emitter = new (require('events').EventEmitter);
example_emitter.on("test", function () { console.log("test"); });
example_emitter.on("print", function (message) { console.log(message); });
example_emitter.emit("test");
example_emitter.emit("print", "message");
example_emitter.emit("unhandled");
> var example_emitter = new (require('events').EventEmitter);
{}
> example_emitter.on("test", function () { console.log("test"); });
{ _events: { test: [Function] } }
> example_emitter.on("print", function (message) { console.log(message); });
{ _events: { test: [Function], print: [Function] } }
> example_emitter.emit("test");
test //console.log'd
true //return value
> example_emitter.emit("print", "message");
message //console.log'd
true //return value
> example_emitter.emit("unhandled");
false //return value
Это демонстрирует все основные функции EventEmitter
. Метод on or addListener
(в основном метод подписки) позволяет вам выбрать событие для просмотра и обратный вызов для вызова. Метод emit
(метод публикации), с другой стороны, позволяет "испускать" событие, которое заставляет все обратные вызовы, зарегистрированные в событии, "стрелять", (вызывается).
Из источника Что такое излучатели событий?
Ответ 3
Рассмотрим функцию обратного вызова -
function test(int a, function(){
console.log("I am call-back function");
}){
console.log("I am a parent function");
}
Теперь, когда родительская функция вызывается в событии (нажатие кнопки или любое соединение и т.д.), он сначала выполняет свой код, а затем управление передается функции обратного вызова. Теперь излучатель событий является объектом/методом, который запускает событие, как только происходит какое-либо действие, чтобы передать cntrol родительской функции.
For-example-Server - это эмитент событий в Node.Js-программировании. Он испускает событие ошибки, как только сервер сталкивается с ошибкой, которая передает элемент управления в родительскую функцию ошибки. Сервер выдает событие соединения, как только сокет подключается к серверу, это событие затем запускает родительскую функцию getConnections, которая также выполняет функцию обратного вызова в качестве аргумента. Таким образом, это действительно цепочка, которая запускается, как что-то происходит с помощью эмиттера событий, который испускает событие для запуска функции.
Ответ 4
простой пример в node.js:
var EventEmitter = require('events').EventEmitter;
var concert = new EventEmitter;
var singer = 'Coldplay';
concert.on('start', function (singer) {
console.log(`OMG ${singer}!`);
});
concert.on('finish', function () {
console.log(`It was the best concert in my life...`);
});
concert.emit('start', singer);
concert.emit('finish');