您好,登錄后才能下訂單哦!
本篇內容主要講解“Node.js中的events事件模塊怎么使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Node.js中的events事件模塊怎么使用”吧!
引用官方說明:Node.js 的大部分核心 API 都是圍繞慣用的異步事件驅動架構構建的,在該架構中,某些類型的對象(稱為"觸發器")觸發命名事件,使
Function
對象("監聽器")被調用。
通過對Node的學習及應用,我們知道NodeJS其采用單線程、事件驅動、非阻塞I/O等架構設計,非常適用于高并發、I/O密集型應用。
事件驅動,簡單來說就是通過有效方法來監聽事件狀態的變化,并在發生變化時做出相應的動作。
舉一個生活應用的場景來理解:當我們去飯店吃飯點餐,當我們下單之后,服務員告訴我們的訂單號(這時候可以理解為注冊了一個事件),我們在坐著等候,這時候我們的耳朵就一直監聽著服務員的喊號,當喊到我們的時候,我們可以去前臺取餐。
NodeJS的事件架構采用經典的--訂閱發布模式
訂閱發布模式,也可以稱之為消息機制,定義了一種依賴關系,這種依賴關系可以理解為 1對N(多個或者單個)觀察者們同時監聽某一個對象相應的狀態變換,一旦變化則通知到所有觀察者,從而觸發觀察者注冊的相應事件,該設計模式解決了主體對象與觀察者之間功能的耦合。
events模塊是NodeJS非常重要的一個模塊,在node中大部分的模塊的實現都繼承了Events類,如fs,http,net等。它提供了一個對象events.EventEmitter,EventEmitter 的核心是事件發射與事件監聽器。
簡單使用:
import { EventEmitter } from 'events'; class MyEmiter extends EventEmitter{}; const myEmitter = new MyEmiter(); myEmitter.on('hello', () => { console.log('hello 有人喊你啦'); }); myEmitter.emit('hello');
4.1 eventEmitter.on(eventName, callback)
注冊監聽事件
參數:
eventName: 事件名稱
callback: 事件觸發被調用回調函數
4.2 eventEmitter.once(eventName, callback)
可以注冊一個監聽器,該監聽器最多為特定事件調用一次。 一旦事件被觸發,則監聽器就會被注銷然后被調用。
參數:
eventName: 事件名稱
callback: 事件觸發被調用回調函數
4.3 eventEmitter.emit(eventName[, ...args])
觸發指定的監聽事件
參數:
eventName: 事件名稱
args可選參數,按順序傳入回調函數的參數;
4.4 eventEmitter.removeListener(eventName, callback)
移除指定事件的監聽器,注意:該監聽器必須是注冊過的。否則無效。
參數:
eventName: 事件名稱
callback: 回調函數
4.5 EventEmitter.removeAllListeners(eventName)
移除所有監聽器,一個事件可以有多個監聽,需要全部移除時,可以用此方法。
參數:
eventName: 需要全部移除的事件名稱;
需要特別注意的是,如果不傳參數,將會移除所有的監聽事件,比較暴力,建議慎用。
4.6 EventEmitter.listeners(eventName)
返回名為 eventName
的事件的監聽器綁定回調函數數組的副本。
4.7 EventEmitter.eventNames()
返回列出觸發器已為其注冊監聽器的事件的數組。
4.8 EventEmitter.setMaxListeners(n)
默認情況下,如果為特定事件添加了 10
個以上的監聽器,則 EventEmitter
將打印警告。
emitter.setMaxListeners() 方法允許修改此特定 EventEmitter
實例的限制。 該值可以設置為 Infinity
(或 0
)以指示無限數量的監聽器。
EventEmitter
按照注冊的順序同步
地調用所有監聽器。這確保了事件的正確排序,并有助于避免競爭條件和邏輯錯誤。
當 EventEmitter
實例中發生錯誤時,典型的操作是觸發 'error'
事件。 這些在 Node.js 中被視為特殊情況。
如果 EventEmitter
沒有為 'error'
事件注冊至少一個監聽器,并且觸發 'error'
事件,則會拋出錯誤,打印堆棧跟蹤,然后退出 Node.js 進程。
作為最佳實踐,應始終為 'error'
事件添加監聽器。
import { EventEmitter } from 'events'; class MyEmiter extends EventEmitter{}; const myEmitter = new MyEmiter(); myEmitter.on('hello', () => { console.log('hello 有人喊你啦'); }); myEmitter.on('error', (e) => { console.log(e) }) myEmitter.emit('hello'); myEmitter.emit('error', new Error('an error happen'))
到此,相信大家對“Node.js中的events事件模塊怎么使用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。