EventEmitter解读
发布于 1个月前 作者 linjun1185 304 次浏览 来自 分享

// 引入EventEmitter事件对象 var Events = require(“events”).EventEmitter;

// 设置全局所有已实例化EventEmitter事件对象的变量的可注册最大数,默认为:10个 Events.defaultMaxListeners = 20;

// 实例化EventEmitter事件对象 var event = new Events();

// 设置当前实例化EventEmitter事件对象的event变量的可注册最大数,默认为:10个 event.setMaxListeners(20);

// 注册事件监听addListener和on用法相同,但是它不会自动触发!需要手工调用emit方法来触发它们 event.addListener("aaa", function (value) { console.log("aaa事件,的参数: " + value.key); }); event.on("bbb", function (value) { console.log("bbb事件,的参数: " + value.key); }); event.emit("aaa", {key: "aaa"}); event.emit("bbb", {key: "bbb"});

// 注册一次性的事件监听,但是它不会自动触发! // 需要手工调用emit方法来触发它们,当在第一次触发时就立即删除了该事件 event.once("ccc", function (value) { console.log("ccc事件,的参数: " + value.key); }); event.emit("ccc", {key: "ccc"}); // 执行这行代码以后 ccc 事件就删除了

// 删除一个事件监听,使用removeListener方法, // 前提是这个事件的回调函数是赋值给变量的,然后删除时需要指明这个回调函数的变量! var callback = function (value) { console.log("ddd事件,的参数: " + value.key); } event.on("ddd", callback); event.removeListener("ddd", callback); // 执行这行代码以后 ddd 事件就删除了

// 使用listeners返回一个事件的回调函数(数组表示),也就是说之前用on注册时共实施了多少个callback event.on("bbb", callback); event.on("bbb", callback); console.log(event.listeners(“bbb”)); // 输出 [ [Function1], [Function2], [Function3] ]

// 使用listenerCount返回一个事件的回调函数总数,也就是说之前用on注册时共实施了多少个callback // 注意它必须是用EventEmitter类调用的,而不是用已实例化后的对象变量调用的 // 第一个参数是当前对象变量 // 第二个参数是已注册的事件名 console.log(Events.listenerCount(event, “bbb”)); // 输出 3

// 删除所有事件,或者指明一个事件名然后删除该事件,使用removeAllListeners, // 然而不需要像removeListener方法这样需要callback的依赖项删除事件 event.removeAllListeners(); // 删除所有以上注册的事件 event.removeAllListeners(“aaa”); // 删除以上注册的"aaa"事件

// 在已实例化的事件对象的变量调用以下的事件监听,则注定了这个对象的变量在每一次注册事件 // 如:on, once, addListener注册事件时都会自动触发"newListener"这个事件 // 回调函数接收的参数,第一个参数是注册时的事件名,第二个参数是注册时的回调函数(闭包) event.on("newListener", function (EventName, callback) { callback({on: EventName}); }); event.addListener("aaa", function (value) { console.log(“我是注册时自动触发的” + value.on + “事件!”); });

// 在已实例化的事件对象的变量调用以下的事件监听,则注定了这个对象的变量在每一次删除事件 // 如:removeListener, removeAllListeners删除事件时都会自动触发"removeListener"这个事件 // 回调函数接收的参数,第一个参数是删除时的事件名,第二个参数是删除时的回调函数(闭包) event.on("removeListener", function (EventName, callback) { callback({EventName: EventName}); }); var callbackName = function (value) { console.log(“我是删除事件时自动触发的” + value.EventName + “事件!”); } event.on("ddd", callbackName); event.removeListener("ddd", callbackName);

// 总结: // addListener和on方法返回当前注册的事件监听的总数与当前可设置的事件监听默认最大数(setMaxListeners) // once则同上,不同之处则对应的callback是对象表示的! // removeListener, removeAllListeners也是同上,只是返回删除后的事件监听的总数与默认最大数(setMaxListeners) // emit返回当调用已注册的事件成功返回true,否则返回false // addListener,on,once,removeListener,removeAllListeners支持链式调用, // 例子: var calls = function () { console.log(“a”); } event.addListener("a", calls) .on("b", function () { console.log(“b”); }).once("c", function (value) { console.log(value.name); }).removeListener("a", calls) .removeAllListeners(“b”).emit("c", { name: “看!我调用的是啥?” }); // emit 返回 true event = null; // 结束

回到顶部