nodejs事件编程详解

jopen 10年前

nodejs事件的例子,先说下事件

Node里面的许多对象都会分发事件:一个net.Server对象会在每次有新连接时分发一个事件, 一个fs.readStream对象会在文件被打开的时候发出一个事件。 所有这些产生事件的对象都是 events.EventEmitter 的实例。 你可以通过require("events");来访问该模块



可以看出我们的事件是定义在events.EventEmitter 的实例,所以我们先实例化这个类
//引入events模块  var events = require("events");  //实例化events.EventEmitter对象  var event = new events.EventEmitter();



有了事件对象后我们就可以添加自定义的事件了
//添加自定义事件  event.on("myevent",function(){   console.log("我定义的事件");  })



我们定义了一个myevent事件,下面我们使用它
//使用事件  event.emit("myevent");


下面一些事件方法

删除一个事件  event.removeListener("myevent",function(){   console.log("现在删除这个once_event事件");  });  //删除所有事件,或者删除某些事件  event.removeAllListeners("myevent");  //添加一个一次性事件,事件被触发后就被删除  event.once("once_event",function(){   console.log("这是个一次性事件,事件被触发后就被删除");   });  //触发一次性事件  event.emit("once_event");  //返回指定事件的listener数组  console.log(event.listeners('myevent'));


下面给我们的对象添加事件

var util = require("util");  var events = require("events");    //让MyEvent继承event.EventEmitter,使用的是util.inherits这个工具来继承  function MyEvent() {      events.EventEmitter.call(this);  }  util.inherits(MyEvent, events.EventEmitter);    //MyEvent类的write方法触发了data这个事件  MyEvent.prototype.write = function(data) {      this.emit("data", data);//触发DATA事件      return this;//返回对象,方便链式调用  }    //实例化MyEvent对象,  var myevent = new MyEvent();    //监听myevent的data事件  myevent.on("data",function(data){   console.log("事件的回调:"+data);  });    //用write方法触发data事件  myevent.write("一个操作后,触发了MyEvent对象的data事件");