首頁  >  文章  >  web前端  >  node.js中的emitter.emit方法使用說明_node.js

node.js中的emitter.emit方法使用說明_node.js

WBOY
WBOY原創
2016-05-16 16:27:532589瀏覽

方法說明:

發射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();
  返回真;
};
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn