nodejs>>events

事件 (Events)
    /*Node里面的许多对象都会分发事件:一个net.Server对象会在每次有新连接时分发一个事件,
    一个fs.readStream对象会在文件被打开的时候发出一个事件。 所有这些产生事件的对象都是 events.EventEmitter 的实例。 
    你可以通过require("events");来访问该模块
    通常,事件名是驼峰命名 (camel-cased) 的字符串。不过也没有强制的要求,任何字符串都是可以使用的。
    为了处理发出的事件,我们将函数 (Function) 关联到对象上。 我们把这些函数称为 监听器 (listeners)。 在监听函数中 this 指向当前监听函数所关联的 EventEmitter 对象。*/
    类: events.EventEmitter
    /*通过 require('events').EventEmitter 获取 EventEmitter 类。
    当 EventEmitter 实例遇到错误,通常的处理方法是产生一个 'error' 事件,node 对错误事件做特殊处理。 
    如果程序没有监听错误事件,程序会按照默认行为在打印出 栈追踪信息 (stack trace) 后退出。
    EventEmitter 会在添加 listener 时触发 'newListener' 事件,删除 listener 时触发 'removeListener' 事件*/
    emitter.addListener(event, listener)
    emitter.on(event, listener)
    为事件添加一个监听,接受一盒字符串event和一个回到函数listener,返回emitter,便于链式调用

    emitter.once(event, listener)
    添加一次性监听,只会触发一次,触发后就会被删除,返回emitter,便于链式调用

    emitter.removeListener(event, listener)
    从事件的listener数组中删除一个listener,此操作会改变listener数组中当前listener后边的listener的下标位置,返回 emitter,方便链式调用。

    emitter.removeAllListeners([event])
    删除listener或.某些事件event的listener,返回 emitter,方便链式调用。

    emitter.setMaxListeners(n)
    在默认情况下,EventEmitter 会在多于 10 个 listener 监听某个事件的时候出现警告,此限制在寻找内存泄露时非常有用。 
    显然,也不是所有的 Emitter 事件都要被限制在 10 个 listener 以下,在这种情况下可以使用这个函数来改变这个限制。设置0这样可以没有限制。返回 emitter,方便链式调用

    EventEmitter.defaultMaxListeners
    显示原文其他翻译纠错
    emitter.setMaxListeners(n) 
    设置每个 emitter 实例的最大监听数。
    这个类属性为 所有 EventEmitter 实例设置最大监听数(对所有已创建的实例和今后创建的实例都将立即生效)。 使用时请注意。
    请注意,emitter.setMaxListeners(n) 优先于 EventEmitter.defaultMaxListeners。

    emitter.listeners(event)
    返回指定事件的 listener 数组

    emitter.emit(event, [arg1], [arg2], [...])
    使用提供的参数按顺序执行指定事件的 listener
    若事件有 listeners 则返回 true 否则返回 false。

    类方法: EventEmitter.listenerCount(emitter, event)
    返回指定事件的 listeners 个数

    事件: 'newListener'
    event {String} 事件名
    listener {Function} 事件处理函数

    事件: 'removeListener'
    event {String} 事件名
    listener {Function} 事件处理函数
    在移除 listener 时会发生该事件。 此时无法确定 listener 是否在 emitter.listeners(event) 返回的列表中。

    var EventEmitter = require('events').EventEmitter;
var emitter = new EventEmitter();


emitter.on('someEvents', function(arg1, arg2){
    console.log('listener1', arg1, arg2);
});
emitter.on('someEvents', function(arg1, arg2){
    console.log('listener2', arg1, arg2);
});
emitter.emit('someEvents', 'yyf', '1992');
console.log(emitter.listeners('someEvents').toString());
console.log(EventEmitter.listenerCount(emitter, 'someEvents')); 


emitter.emit('error');
/*输出
listener1 yyf 1992
listener2 yyf 1992
function (arg1, arg2){
    console.log('listener1', arg1, arg2);
},function (arg1, arg2){
    console.log('listener2', arg1, arg2);
}
2


events.js:74
        throw TypeError('Uncaught, unspecified "error" event.');
              ^
TypeError: Uncaught, unspecified "error" event.
    at TypeError ()
    at EventEmitter.emit (events.js:74:15)
    at Object. (D:\xampp\htdocs\qywechat\serv\wxbase\api\t.js:14:9)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:906:3
*/

你可能感兴趣的:(nodejs>>events)