node核心EventEmitter的應用總結

2021-10-23 01:49:15 字數 2037 閱讀 9929

eventemitter是node中應用非常廣泛,不管是框架,還是腳手架,還是外掛程式都可以看到eventemitter的身影。比如我們去檢視vue, react, webpack, egg, koa等框架或者外掛程式的原始碼,都可以看到內部使用到了eventemitter。那麼到底什麼是eventemitter呢。

總體介紹:

進入node.js官網,eventemitter的介紹有一大堆api,很多初學者覺得一頭霧水,其實eventemitter並不複雜,它採用了js中最經典的設計模式,訂閱/發布者模式,在此基礎上擴充套件和封裝實現了適用於node中的方法和事件。

做個比喻,eventemitter就像乙個訊號排程中心,這個排程中心儲存了所有內部事件的訊號,並接收外界的訊號,當接收到外界的訊號時,根據訊號去觸發對應的事件。再簡單一些可以理解為手機號碼儲存中心,先把所有號碼的資訊儲存到這個中心,當撥打號碼時,通知到對應的人。

下面是eventemitter乙個簡單的實現

events 模組只提供了乙個物件: events.eventemitter。eventemitter 的核心就是事件觸發與事件***功能的封裝。

eventemitter是乙個類,使用時需要例項化
var eventemitter = require('events').eventemitter; 

var event = new eventemitter();

event.on('some_event', function() );

settimeout(function() , 1000);

常用api:

訂閱事件on(event, listener),addlistener(event, listener) (新增**號碼)

單次訂閱once(event, listener) (只用一次的**號碼)

移除訂閱事件 removelistener(event, listener)  listener必須傳入(刪除某個**號碼)

移除所有 removealllisteners([event])  (刪除所有**號碼)

var callback = function(stream) ;

server.on('connection', callback);

// ...

server.removelistener('connection', callback);

設定事件訂閱的個數:setmaxlisteners(n) (最多有多少個**號碼)返回事件訂閱的個數:listeners(event)   (**號碼的個數)按順序觸發事件訂閱的函式:emit(event, [arg1], [arg2], [...])  (打**)新增新***時被觸發,newlistener 事件會觸發,

當***被移除時,removelistener 事件被觸發

這裡的removelistener和newlistener指的是事件,雖然removelistener和方法removelistener名字一樣,但是乙個是事件,乙個是方法。

例項:

除了上面的新增事件和移除事件,還有error事件

error事件在node執行發生錯誤時被觸發,但是當 error 被觸發時,eventemitter 規定如果沒有響 應的***,node.js 會把它當作異常,退出程式並輸出錯誤資訊。

所以一般我們要給emitter新增錯誤事件監聽

以上就是events模組eventemitter的使用,不過很多情況下,我們會繼承eventemitter後,使用繼承後的類。

node核心模組

1 http模組 搭建 http 服務端和客戶端 2 fs模組 檔案管理 3 path模組 處理檔案和目錄的路徑 4 url模組 處理url 5 querystring模組 處理查詢字串 6 os模組 提供作業系統的一些基本資訊 7 net模組 提供了一些用於底層的網路通訊的小工具,包含了建立伺服器...

Node核心模組

在node中,模組主要分兩大類 核心模組和檔案模組。核心模組部分在 node 源 的編譯過程中,編譯進了二進位制執行檔案。在 node 進啟動時,部分核心模組就被直接載入進記憶體中,所以這部分核心模組引入時,檔案定位和編譯執行這兩個步驟可以省略掉,並且在路徑分析中優先判斷,所以它的載入速度是最快的。...

Node核心模組Buffer

buffer是node掛載到global上的乙個類。也就是記憶體,乙個漢字在utf8編碼下是三個位元組。buffer的變現形式是16進製制。let buf buffer.alloc 6 console.log buf 複製 let buf buffer.from 123131 let buf buf...