Что такое "эмиттер событий"?
просмотр http://microjs.com, я вижу много библиотек с надписью "эмиттеры событий". Мне нравится думать, что я знаю свой путь вокруг основ языка javascript довольно хорошо, но я действительно понятия не имею, что такое "эмиттер событий" или делает.
кто-нибудь просветить меня? Звучит интересно...
4 ответов:
это вызывает событие который любой может слушать. Разные библиотеки предлагают разные реализации и для разных целей, но основная идея заключается в том, чтобы обеспечить основу для выпуска событий и подписки на них.
пример из 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");
в узел.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метод (метод публикации), с другой стороны, позволяет вам "испускать" событие, которое вызывает все обратные вызовы, зарегистрированные для события, чтобы "выстрелить" (получить вызов).из источника Что такое излучатели событий?
простой пример в узел.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');
рассмотрим функцию обратного вызова -
function test(int a, function(){ console.log("I am call-back function"); }){ console.log("I am a parent function"); }теперь, когда родительская функция вызывается на событие (нажатие кнопки или любое соединение и т. д.) , Она сначала выполняет свой код, а затем управление передается функции обратного вызова. Теперь эмиттер событий-это объект / метод, который запускает событие, как только происходит какое-либо действие, чтобы передать cntrol родительской функции. Например-сервер является эмиттером событий в узле.В JS программирования. Он выдает событие ошибки, как только сервер обнаруживает ошибку, которая передает управление родительской функции error. Сервер выдает событие соединения как только сокет подключается к серверу, это событие затем запускает родительскую функцию getConnections, которая действительно также принимает функцию обратного вызова в качестве аргумента. Таким образом, это действительно цепочка, которая запускается как что-то происходит с помощью эмиттера событий, который выдает событие для запуска функции.
Comments