Node.js事件機制

node.js是單線程,,通過事件和回調來支持併發。Node.js 基本上所有的事件機制都是用設計模式中觀察者模式實現。

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 和 emiton 函數用於綁定事件函數,emit 屬性用於觸發一個事件。接下來我們來具體看下 EventEmitter 的屬性介紹。


addListener(event, listener)
爲指定事件添加一個監聽器到監聽器數組的尾部。

removeListener(event, listener)

移除指定事件的某個監聽器,監聽器必須是該事件已經註冊過的監聽器。

它接受兩個參數,第一個是事件名稱,第二個是回調函數名稱。


on(event, listener)
爲指定事件註冊一個監聽器,接受一個字符串 event 和一個回調函數。


emit(event, [arg1], [arg2], [...])
按參數的順序執行每個監聽器,如果事件有註冊監聽返回 true,否則返回 false。




emit(event, [arg1], [arg2], [...])
按參數的順序執行每個監聽器,如果事件有註冊監聽返回 true,否則返回 false。
發佈了26 篇原創文章 · 獲贊 24 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章