下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第聊聊Node.js中的events事件模塊引用官方說明:Node.js的大部分核心API都是圍繞慣用的異步事件驅動架構構建的,在該架構中,某些類型的對象(稱為觸發(fā)器)觸發(fā)命名事件,使Function對象(監(jiān)聽器)被調用。
通過對Node的學習及應用,我們知道NodeJS其采用單線程、事件驅動、非阻塞I/O等架構設計,非常適用于高并發(fā)、I/O密集型應用。
1.什么是事件驅動?
事件驅動,簡單來說就是通過有效方法來監(jiān)聽事件狀態(tài)的變化,并在發(fā)生變化時做出相應的動作。
舉一個生活應用的場景來理解:當我們去飯店吃飯點餐,當我們下單之后,服務員告訴我們的訂單號(這時候可以理解為注冊了一個事件),我們在坐著等候,這時候我們的耳朵就一直監(jiān)聽著服務員的喊號,當喊到我們的時候,我們可以去前臺取餐。
2.事件模型
NodeJS的事件架構采用經(jīng)典的--訂閱發(fā)布模式
訂閱發(fā)布模式,也可以稱之為消息機制,定義了一種依賴關系,這種依賴關系可以理解為1對N(多個或者單個)觀察者們同時監(jiān)聽某一個對象相應的狀態(tài)變換,一旦變化則通知到所有觀察者,從而觸發(fā)觀察者注冊的相應事件,該設計模式解決了主體對象與觀察者之間功能的耦合。
3.events模塊
events模塊是NodeJS非常重要的一個模塊,在node中大部分的模塊的實現(xiàn)都繼承了Events類,如fs,http,net等。它提供了一個對象events.EventEmitter,EventEmitter的核心是事件發(fā)射與事件監(jiān)聽器。
簡單使用:
import{EventEmitter}fromevents
classMyEmiterextendsEventEmitter{};
constmyEmitter=newMyEmiter();
myEmitter.on(hello,()={
console.log(hello有人喊你啦
myEmitter.emit(hello
4.Events模塊核心API
4.1eventEmitter.on(eventName,callback)
注冊監(jiān)聽事件
參數(shù):
eventName:事件名稱
callback:事件觸發(fā)被調用回調函數(shù)
4.2eventEmitter.once(eventName,callback)
可以注冊一個監(jiān)聽器,該監(jiān)聽器最多為特定事件調用一次。一旦事件被觸發(fā),則監(jiān)聽器就會被注銷然后被調用。
參數(shù):
eventName:事件名稱
callback:事件觸發(fā)被調用回調函數(shù)
4.3eventEmitter.emit(eventName[,...args])
觸發(fā)指定的監(jiān)聽事件
參數(shù):
eventName:事件名稱
args可選參數(shù),按順序傳入回調函數(shù)的參數(shù);
4.4eventEmitter.removeListener(eventName,callback)
移除指定事件的監(jiān)聽器,注意:該監(jiān)聽器必須是注冊過的。否則無效。
參數(shù):
eventName:事件名稱
callback:回調函數(shù)
4.5EventEmitter.removeAllListeners(eventName)
移除所有監(jiān)聽器,一個事件可以有多個監(jiān)聽,需要全部移除時,可以用此方法。
參數(shù):
eventName:需要全部移除的事件名稱;
需要特別注意的是,如果不傳參數(shù),將會移除所有的監(jiān)聽事件,比較暴力,建議慎用。
4.6EventEmitter.listeners(eventName)
返回名為eventName的事件的監(jiān)聽器綁定回調函數(shù)數(shù)組的副本。
4.7EventEmitter.eventNames()
返回列出觸發(fā)器已為其注冊監(jiān)聽器的事件的數(shù)組。
4.8EventEmitter.setMaxListeners(n)
默認情況下,如果為特定事件添加了10個以上的監(jiān)聽器,則EventEmitter將打印警告。
emitter.setMaxListeners()方法允許修改此特定EventEmitter實例的限制。該值可以設置為Infinity(或0)以指示無限數(shù)量的監(jiān)聽器。
5.同步異步的問題
EventEmitter按照注冊的順序同步地調用所有監(jiān)聽器。這確保了事件的正確排序,并有助于避免競爭條件和邏輯錯誤。
6.錯誤處理
當EventEmitter實例中發(fā)生錯誤時,典型的操作是觸發(fā)error事件。這些在Node.js中被視為特殊情況。
如果EventEmitter沒有為error事件注冊至少一個監(jiān)聽器,并且觸發(fā)error事件,則會拋出錯誤,打印堆棧跟蹤,然后退出Node.js進程。
作為最佳實踐,應始終為error事件添加監(jiān)聽器。
import{EventEmitter}fromevents
classMyEmiterextendsEventEmitter{};
constmyEmitter=newMyEmiter();
myEmitter.on(hello,()={
console.log(hello有人喊你啦
m
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026福建省面向中國科學院大學選調生選拔工作考試備考題庫附答案
- 2026貴州遵義市湄潭縣消防救援大隊政府專職消防隊員招聘20人參考題庫附答案
- 2026重慶醫(yī)科大學附屬第一醫(yī)院工作人員招聘參考題庫附答案
- 2026青海省海西州德令哈市司法局招聘1人備考題庫附答案
- 中共玉環(huán)市委宣傳部關于下屬事業(yè)單位 市互聯(lián)網(wǎng)宣傳指導中心公開選聘1名工作人員的考試備考題庫附答案
- 會昌縣2025年縣直事業(yè)單位公開選調一般工作人員考試備考題庫附答案
- 德令哈市公安局2025年面向社會公開招聘警務輔助人員參考題庫附答案
- 招37人!2025年囊謙縣公安局面向社會公開招錄警務輔助人員的參考題庫附答案
- 浙江國企招聘-2025年浙江錢江實驗室有限公司第三批公開招聘工作人員3人備考題庫附答案
- 貴州國企招聘:202榕江縣供銷社招聘參考題庫附答案
- 春節(jié)大客車安全培訓內容課件
- (人教A版)必修一高一數(shù)學上冊同步分層練習1.3 并集與交集第1課時(原卷版)
- 完整銀行貸款合同5篇
- 供應鏈年終總結報告
- 2025年高考數(shù)學真題分類匯編專題10 直線與圓及圓錐曲線(全國)(解析版)
- 全媒體矩陣宣傳推廣服務項目方案投標文件(技術方案)
- 2025版地暖施工項目進度管理與結算合同
- 軍人成長成才課件
- 脊柱外科工作匯報
- 滬教牛津版英語九年級上學期英語各單元語法專項
- 熱身運動課堂課件
評論
0/150
提交評論