Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选

首页 / 脚本样式 / JavaScript / node.js中的emitter.on方法使用说明

方法说明:
为指定事件注册一个监听器。
语法:
复制代码 代码如下:
emitter.on(event, listener)
emitter.addListener(event, listener)

接收参数:
event            (string)             事件类型
listener         (function)         触发事件时的回调函数
例子:
复制代码 代码如下:
server.on("connection", function (stream) {
  console.log("someone connected!");
});

源码:
复制代码 代码如下:
EventEmitter.prototype.addListener = function(type, listener) {
  var m;
  if (!util.isFunction(listener))
    throw TypeError("listener must be a function");
  if (!this._events)
    this._events = {};
  // To avoid recursion in the case that type === "newListener"! Before
  // adding it to the listeners, first emit "newListener".
  if (this._events.newListener)
    this.emit("newListener", type,
              util.isFunction(listener.listener) ?
              listener.listener : listener);
  if (!this._events[type])
    // Optimize the case of one listener. Don"t need the extra array object.
    this._events[type] = listener;
  else if (util.isObject(this._events[type]))
    // If we"ve already got an array, just append.
    this._events[type].push(listener);
  else
    // Adding the second element, need to change to array.
    this._events[type] = [this._events[type], listener];
  // Check for listener leak
  if (util.isObject(this._events[type]) && !this._events[type].warned) {
    var m;
    if (!util.isUndefined(this._maxListeners)) {
      m = this._maxListeners;
    } else {
      m = EventEmitter.defaultMaxListeners;
    }
    if (m && m > 0 && this._events[type].length > m) {
      this._events[type].warned = true;
      console.error("(node) warning: possible EventEmitter memory " +
                    "leak detected. %d listeners added. " +
                    "Use emitter.setMaxListeners() to increase limit.",
                    this._events[type].length);
      console.trace();
    }
  }
  return this;
};