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

  方法说明:

  发射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, handler, len, args, i, listeners;

  if (!this._events)

  this._events = {};

  // If there is no 'error' event listener then throw.

  if (type === 'error') {

  if (!this._events.error ||

  (util.isObject(this._events.error) && !this._events.error.length)) {

  er = arguments[1];

  if (this.domain) {

  if (!er) er = new TypeError('Uncaught, unspecified "error" event.');

  er.domainEmitter = this;

  er.domain = this.domain;

  er.domainThrown = false;

  this.domain.emit('error', er);

  } else if (er instanceof Error) {

  throw er; // Unhandled 'error' event

  } else {

  throw TypeError('Uncaught, unspecified "error" event.');

  }

  return false;

  }

  }

  handler = this._events[type];

  if (util.isUndefined(handler))

  return false;

  if (this.domain && this !== process)

  this.domain.enter();

  if (util.isFunction(handler)) {

  switch (arguments.length) {

  // fast cases

  case 1:

  handler.call(this);

  break;

  case 2:

  handler.call(this, arguments[1]);

  break;

  case 3:

  handler.call(this, arguments[1], arguments[2]);

  break;

  // slower

  default:

  len = arguments.length;

  args = new Array(len - 1);

  for (i = 1; i < len; i++)

  args[i - 1] = arguments[i];

  handler.apply(this, args);

  }

  } else if (util.isObject(handler)) {

  len = arguments.length;

  args = new Array(len - 1);

  for (i = 1; i < len; i++)

  args[i - 1] = arguments[i];

  listeners = handler.slice();

  len = listeners.length;

  for (i = 0; i < len; i++)

  listeners[i].apply(this, args);

  }

  if (this.domain && this !== process)

  this.domain.exit();

  return true;

  };