Node.js 單線程類似進入一個while(true)的事件循環,直到沒有事件觀察者退出,每個異步事件都生成一個事件觀察者,如果有事件發生就調用該回調函數。
這一點有點兒像開發遊戲的時候觸發了某一事件,,進入到回調函數中進行具體的操作,,,比如遊戲物體碰撞檢測之後(進入到傳送門),回掉函數使其切換場景。
ar events = require('events');
// 創建 eventEmitter 對象
var eventEmitter = new events.EventEmitter();
// 創建事件處理程序
var connectHandler = function connected() {
console.log('連接成功。');
// 觸發 data_received 事件
eventEmitter.emit('data_received');
}
// 綁定 connection 事件處理程序
eventEmitter.on('connection', connectHandler);
// 使用匿名函數綁定 data_received 事件
eventEmitter.on('data_received', function(){
console.log('數據接收成功。');
});
// 觸發 connection 事件
eventEmitter.emit('connection');
console.log("程序執行完畢。");
執行結果:
連接成功。
數據接收成功。
程序執行完畢。
events 模塊只提供了一個對象: events.EventEmitter。EventEmitter 的核心就是事件觸發與事件監聽器功能的封裝。
我們可以通過require("events");來訪問該模塊。
EventEmitter 提供了多個屬性,如 on 和 emit。on 函數用於綁定事件函數,emit 屬性用於觸發一個事件。接下來我們來具體看下
EventEmitter 的屬性介紹。
addListener(event,
listener)
爲指定事件添加一個監聽器到監聽器數組的尾部。
removeListener(event,
listener)
移除指定事件的某個監聽器,監聽器必須是該事件已經註冊過的監聽器。
它接受兩個參數,第一個是事件名稱,第二個是回調函數名稱。
on(event,
listener)
爲指定事件註冊一個監聽器,接受一個字符串 event 和一個回調函數。
emit(event, [arg1], [arg2], [...]) 按參數的順序執行每個監聽器,如果事件有註冊監聽返回 true,否則返回 false。 |
emit(event, [arg1], [arg2], [...]) 按參數的順序執行每個監聽器,如果事件有註冊監聽返回 true,否則返回 false。 |