事件发射器是Node里除了回调函数外的另一十分重要的异步编程技术。 在MFC等图形界面编程库中,事件发射器是非常常见的,比如,鼠标点击事件,点击了鼠标后,就会触发鼠标点击后的函数——事件发射器触发事件,并且在事件被触发后处理它们。在Node API组件中,如HTTP服务器、TCP服务器等都被做成了事件发射器,所以掌握事件发射器的编程方法,是非常重要的。

使用on添加监听器

步骤:

  1. 声明事件发射器类
  2. 创建事件发射器对象
  3. 使用on添加事件发射器
  4. 使用emit发射事件
//事件发射器类声明
var EventEmitter =  require("events").EventEmitter;
//创建事件发射器
var emitter = new EventEmitter();

//使用on添加监听器
emitter.on("hello",function(){
    console.log("Hello");
});

//使用emit函数发射事件
emitter.emit("hello");

使用addListener添加事件

示例:

//事件发射器类声明
var EventEmitter =  require("events").EventEmitter;
//创建事件发射器
var emitter = new EventEmitter();

//使用addListener添加监听器
emitter.addListener("hello",function(){
    console.log("Hello");
});

//使用emit函数发射事件
emitter.emit("hello");

注册带参数的事件监听器

注册的监听器可直接带上参数,在emit发射事件时,添加上对应的参数即可。示例:

//事件发射器类声明
var EventEmitter =  require("events").EventEmitter;
//创建事件发射器
var emitter = new EventEmitter();

//使用on添加监听器
emitter.on("hello",function(name,age){
    console.log(name+" is "+age);
});

//使用emit函数发射事件
emitter.emit("hello","king","21");

移除事件发射器

使用removeAllListeners移除hello事件所有的监听器,使用removeListener移除hello事件特定的监听器,示例:

//事件发射器类声明
var EventEmitter =  require("events").EventEmitter;
//创建事件发射器
var emitter = new EventEmitter();

//使用on添加监听器
emitter.on("hello",function(name,age){
    console.log(name+" is "+age);
});

//使用emit函数发射事件
emitter.emit("hello","king","21");

//添加移除监听器的事件
emitter.on("quit",function(name){
    emitter.removeAllListeners(name) ; //移除名字为name的事件监听器
});
//移除hello这一事件
emitter.emit("quit","hello");

//再调用一次看看效果(不会有任何效果,因为现在已经没有hello这个事件的监听器了)
emitter.emit("hello","king","21");