Nodejs之核心EventEmitter介绍

大神们说若是你不会Nodejs的EventEmitter,那么说明你的Nodejs尚未入门。-_-!!这么说来好像我就没有入门的样子,因此说必定要把EventEmitter学懂,争取早日入门Nodejshtml

文章的结尾我会列出我学习中参考的文章列表node

最简单的例子

最好的学习方式仍是直接看代码。api

var EventEmitter = require('events').EventEmitter;
var weather = new EventEmitter();

weather.on('wind', function(level){
    console.log("Wind L(%d)", level);
})

weather.emit('wind', 5)

运行以后的输出就是函数

Wind L(5)

看来eventemitter就是一个事件循环,有接收消息的,有发送消息的。学习

代码从新修改下,改为ui

var EventEmitter = require('events').EventEmitter;
var weather = new EventEmitter();

weather.on('wind', function(level){
    console.log("Wind L(%d)", level);
})
weather.on('wind', function(level){
    console.log("Another say: Wind L(%d)", level);
})

weather.emit('wind', 5)

输出变成了spa

Wind L(5)
Another say: Wind L(5)

看来无论多少个接收器都是能够接收到消息的。code

其余库是如何用到EventEmitter的

好比经典的fs库, 准备一个文件,文件名sf.txt,内容为 hihtm

var fs = require('fs'); 
var reader = fs.createReadStream('sf.txt')
reader.on('data', function(data){
    console.log(data.toString('utf-8'))
})

输出为事件

hi

果真跟我想的同样,同样的事件循环机制。

eventemitter中的once函数

看样子仍是挺好理解的,直接修改第一个例子

var EventEmitter = require('events').EventEmitter;
var weather = new EventEmitter();

weather.once('wind', function(level){
    console.log("Once Wind L(%d)", level);
})
weather.on('wind', function(level){
    console.log("On Wind L(%d)", level);
})

weather.emit('wind', 5)
weather.emit('wind', 7)

输出是

Once Wind L(5)
On Wind L(5)
On Wind L(7)

once就是只有在第一次数据到来的时候触发,这种结果仍是挺符合预期的。

参考资料

相关文章
相关标签/搜索