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

參考資料

相關文章
相關標籤/搜索