>  기사  >  웹 프론트엔드  >  node.js_node.js에서 Emitter.emit 메소드를 사용하기 위한 지침

node.js_node.js에서 Emitter.emit 메소드를 사용하기 위한 지침

WBOY
WBOY원래의
2016-05-16 16:27:532625검색

방법 설명:

이벤트 이벤트를 내보내고 여러 선택적 매개변수를 이벤트 리스너의 매개변수 목록에 전달합니다.

문법:

코드 복사 코드는 다음과 같습니다.

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를 반환합니다.
};
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.