방법 설명:
이벤트 이벤트를 내보내고 여러 선택적 매개변수를 이벤트 리스너의 매개변수 목록에 전달합니다.
문법:
Emitter.emit(이벤트, [arg1], [arg2], [...])
수신 매개변수:
이벤트 이벤트 종류
arg1 ~ argN 전달된 매개변수(다중)
예:
var events = require('events');
var 에미터 = 새 이벤트.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 = 함수(유형) {
var er, handler, len, args, i, 청취자;
if (!this._events)
this._events = {};
// '오류' 이벤트 리스너가 없으면 발생합니다.
if (유형 === '오류') {
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('error', er);
} else if(오류 인스턴스) {
어 던져; // 처리되지 않은 '오류' 이벤트
} 그 밖의 {
throw TypeError('잡히지 않고 지정되지 않은 "오류" 이벤트.');
}
false를 반환합니다.
}
}
핸들러 = this._events[type];
if (util.isUndefine(handler))
false를 반환합니다.
if (this.domain && this !== 프로세스)
this.domain.enter();
if (util.isFunction(handler)) {
스위치(arguments.length) {
// 빠른 경우
사례 1:
handler.call(this);
휴식;
사례 2:
handler.call(this, 인수[1]);
휴식;
사례 3:
handler.call(this, 인수[1], 인수[2]);
휴식;
//느림
기본값:
len = 인수.길이;
args = 새 배열(len - 1);
for (i = 1; i
args[i - 1] = 인수[i];
handler.apply(this, args);
}
} else if (util.isObject(handler)) {
len = 인수.길이;
args = 새 배열(len - 1);
for (i = 1; i
args[i - 1] = 인수[i];
리스너 = handler.slice();
len = 청취자.길이;
for (i = 0; i
청취자[i].apply(this, args);
}
if (this.domain && this !== 프로세스)
this.domain.exit();
true를 반환합니다.
};