大神们说若是你不会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
好比经典的fs库, 准备一个文件,文件名sf.txt
,内容为 hi
htm
var fs = require('fs'); var reader = fs.createReadStream('sf.txt') reader.on('data', function(data){ console.log(data.toString('utf-8')) })
输出为事件
hi
果真跟我想的同样,同样的事件循环机制。
看样子仍是挺好理解的,直接修改第一个例子
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就是只有在第一次数据到来的时候触发,这种结果仍是挺符合预期的。