大神們說若是你不會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就是隻有在第一次數據到來的時候觸發,這種結果仍是挺符合預期的。