方法說明:
發射event事件,傳遞若干可選參數到事件監聽器的參數表。
文法:
emitter.emit(event, [arg1], [arg2], [...])
接收參數:
event 事件類型
arg1 ~ argN 傳遞的參數(多)
範例:
var events = require('events');
var emitter = new events.EventEmitter();
emitter.on('someEvent', function(arg1, arg2){
console.log('listener1', arg1, arg2);
})
emitter.on('someEvent', function(arg1, arg2){
console.log('listener2', arg1, arg2);
})
emitter.emit('someEvent', 'byvoid', 1991);
原始碼:
EventEmitter.prototype.emit = function(type) {
var er、處理程序、len、args、i、偵聽器;
if (!this._events)
this._events = {};
// 如果沒有 'error' 事件監聽器則拋出。
if (type === '錯誤') {
if (!this._events.error ||
(util.isObject(this._events.error) && !this._events.error.length)) {
呃=參數[1];
if (this.domain) {
if (!er) er = new TypeError('未捕獲,未指定的「錯誤」事件。');
er.domainEmitter = this;
er.domain = this.domain;
er.domainThrown = false;
this.domain.emit('錯誤', 呃);
} else if (er instanceof Error) {
丟呃; // 未處理的「錯誤」事件
} 其他 {
throw TypeError('未捕獲,未指定的「錯誤」事件。');
}
回傳錯誤;
}
}
handler = this._events[type];
if (util.isUndefined(handler))
回傳錯誤;
if (this.domain && this !== process)
this.domain.enter();
if (util.isFunction(handler)) {
switch (arguments.length) {
// 快速案例
狀況1:
handler.call(this);
休息;
狀況2:
handler.call(this, 參數[1]);
休息;
狀況3:
handler.call(this, 參數[1], 參數[2]);
休息;
// 較慢
預設值:
len = 參數.length;
args = new Array(len - 1);
for (i = 1; i
args[i - 1] = 參數[i];
handler.apply(this, args);
}
} else if (util.isObject(handler)) {
len = 參數.length;
args = new Array(len - 1);
for (i = 1; i
args[i - 1] = 參數[i];
聽眾 = handler.slice();
len =listeners.length;
for (i = 0; i
聽眾[i].apply(this, args);
}
if (this.domain && this !== process)
this.domain.exit();
返回真;
};