欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Node.js中的events事件模塊知識點(diǎn)總結(jié)

 更新時(shí)間:2021年12月07日 08:53:25   作者:青燈夜游  
在本篇文章里小編給大家整理的是一篇關(guān)于Node.js中的events事件模塊知識點(diǎn)總結(jié)內(nèi)容,有興趣的朋友們可以跟著學(xué)習(xí)下。

通過對Node的學(xué)習(xí)及應(yīng)用,我們知道NodeJS其采用單線程、事件驅(qū)動(dòng)、非阻塞I/O等架構(gòu)設(shè)計(jì),非常適用于高并發(fā)、I/O密集型應(yīng)用。

1. 什么是事件驅(qū)動(dòng)?

事件驅(qū)動(dòng),簡單來說就是通過有效方法來監(jiān)聽事件狀態(tài)的變化,并在發(fā)生變化時(shí)做出相應(yīng)的動(dòng)作。

舉一個(gè)生活應(yīng)用的場景來理解:當(dāng)我們?nèi)ワ埖瓿燥堻c(diǎn)餐,當(dāng)我們下單之后,服務(wù)員告訴我們的訂單號(這時(shí)候可以理解為注冊了一個(gè)事件),我們在坐著等候,這時(shí)候我們的耳朵就一直監(jiān)聽著服務(wù)員的喊號,當(dāng)喊到我們的時(shí)候,我們可以去前臺(tái)取餐。

2. 事件模型

NodeJS的事件架構(gòu)采用經(jīng)典的--訂閱發(fā)布模式

訂閱發(fā)布模式,也可以稱之為消息機(jī)制,定義了一種依賴關(guān)系,這種依賴關(guān)系可以理解為 1對N(多個(gè)或者單個(gè))觀察者們同時(shí)監(jiān)聽某一個(gè)對象相應(yīng)的狀態(tài)變換,一旦變化則通知到所有觀察者,從而觸發(fā)觀察者注冊的相應(yīng)事件,該設(shè)計(jì)模式解決了主體對象與觀察者之間功能的耦合。

3. events模塊

events模塊是NodeJS非常重要的一個(gè)模塊,在node中大部分的模塊的實(shí)現(xiàn)都繼承了Events類,如fs,http,net等。它提供了一個(gè)對象events.EventEmitter,EventEmitter 的核心是事件發(fā)射與事件監(jiān)聽器。

簡單使用:

import { EventEmitter } from 'events';
 
class MyEmiter extends EventEmitter{};
 
const myEmitter = new MyEmiter();
 
myEmitter.on('hello', () => {
  console.log('hello 有人喊你啦');
});
 
myEmitter.emit('hello');

4. Events模塊核心API

4.1 eventEmitter.on(eventName, callback)

注冊監(jiān)聽事件

參數(shù):

eventName: 事件名稱

callback: 事件觸發(fā)被調(diào)用回調(diào)函數(shù)

4.2 eventEmitter.once(eventName, callback)

可以注冊一個(gè)監(jiān)聽器,該監(jiān)聽器最多為特定事件調(diào)用一次。 一旦事件被觸發(fā),則監(jiān)聽器就會(huì)被注銷然后被調(diào)用。

參數(shù):

eventName: 事件名稱

callback: 事件觸發(fā)被調(diào)用回調(diào)函數(shù)

4.3 eventEmitter.emit(eventName[, ...args])

觸發(fā)指定的監(jiān)聽事件

參數(shù):

eventName: 事件名稱

args可選參數(shù),按順序傳入回調(diào)函數(shù)的參數(shù);

4.4 eventEmitter.removeListener(eventName, callback)

移除指定事件的監(jiān)聽器,注意:該監(jiān)聽器必須是注冊過的。否則無效。

參數(shù):

eventName: 事件名稱

callback: 回調(diào)函數(shù)

4.5 EventEmitter.removeAllListeners(eventName)

移除所有監(jiān)聽器,一個(gè)事件可以有多個(gè)監(jiān)聽,需要全部移除時(shí),可以用此方法。

參數(shù):

eventName: 需要全部移除的事件名稱;

需要特別注意的是,如果不傳參數(shù),將會(huì)移除所有的監(jiān)聽事件,比較暴力,建議慎用。

4.6 EventEmitter.listeners(eventName)

返回名為 eventName 的事件的監(jiān)聽器綁定回調(diào)函數(shù)數(shù)組的副本。

4.7 EventEmitter.eventNames()

返回列出觸發(fā)器已為其注冊監(jiān)聽器的事件的數(shù)組。

4.8 EventEmitter.setMaxListeners(n)

默認(rèn)情況下,如果為特定事件添加了 10 個(gè)以上的監(jiān)聽器,則 EventEmitter 將打印警告。

emitter.setMaxListeners() 方法允許修改此特定 EventEmitter 實(shí)例的限制。 該值可以設(shè)置為 Infinity(或 0)以指示無限數(shù)量的監(jiān)聽器。

5. 同步異步的問題

EventEmitter 按照注冊的順序同步地調(diào)用所有監(jiān)聽器。這確保了事件的正確排序,并有助于避免競爭條件和邏輯錯(cuò)誤。

6.錯(cuò)誤處理

當(dāng) EventEmitter 實(shí)例中發(fā)生錯(cuò)誤時(shí),典型的操作是觸發(fā) 'error' 事件。 這些在 Node.js 中被視為特殊情況。

如果 EventEmitter 沒有為 'error' 事件注冊至少一個(gè)監(jiān)聽器,并且觸發(fā) 'error' 事件,則會(huì)拋出錯(cuò)誤,打印堆棧跟蹤,然后退出 Node.js 進(jìn)程。

作為最佳實(shí)踐,應(yīng)始終為 'error' 事件添加監(jiān)聽器。

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'))

到此這篇關(guān)于Node.js中的events事件模塊知識點(diǎn)總結(jié)的文章就介紹到這了,更多相關(guān)Node.js中的events事件模塊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • NodeJS創(chuàng)建基礎(chǔ)應(yīng)用并應(yīng)用模板引擎

    NodeJS創(chuàng)建基礎(chǔ)應(yīng)用并應(yīng)用模板引擎

    這篇文章主要介紹了NodeJS創(chuàng)建基礎(chǔ)應(yīng)用并應(yīng)用模板引擎的相關(guān)資料,需要的朋友可以參考下
    2016-04-04
  • 詳解使用nodeJs安裝Vue-cli

    詳解使用nodeJs安裝Vue-cli

    這篇文章主要介紹了詳解使用nodeJs安裝Vue-cli,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • Nodejs搭建多進(jìn)程Web服務(wù)器實(shí)現(xiàn)過程

    Nodejs搭建多進(jìn)程Web服務(wù)器實(shí)現(xiàn)過程

    這篇文章主要為大家介紹了Nodejs搭建多進(jìn)程Web服務(wù)器實(shí)現(xiàn)過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • 利用python分析access日志的方法

    利用python分析access日志的方法

    最近在自學(xué)python,光看是不行的,還是要多實(shí)操的。這就是一個(gè)寫給自己的小小工具。主要功能是,便利日志文件夾下的文件,根據(jù)設(shè)定的關(guān)鍵字查找是否有web攻擊行為。有需要的朋友們下面來一起看看吧。
    2016-10-10
  • node使用mysql獲取數(shù)據(jù)庫數(shù)據(jù)中文亂碼問題的解決

    node使用mysql獲取數(shù)據(jù)庫數(shù)據(jù)中文亂碼問題的解決

    這篇文章主要介紹了node使用mysql獲取數(shù)據(jù)庫數(shù)據(jù)中文亂碼問題的解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • windows如何把已安裝的nodejs高版本降級為低版本(圖文教程)

    windows如何把已安裝的nodejs高版本降級為低版本(圖文教程)

    這篇文章主要介紹了windows如何把已安裝的nodejs高版本降級為低版本,本文分步驟通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • node.js中的fs.fchownSync方法使用說明

    node.js中的fs.fchownSync方法使用說明

    這篇文章主要介紹了node.js中的fs.fchownSync方法使用說明,本文介紹了fs.fchownSync方法說明、語法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • node.js調(diào)用C++函數(shù)的方法示例

    node.js調(diào)用C++函數(shù)的方法示例

    這篇文章主要介紹了node.js調(diào)用C++函數(shù)的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-09-09
  • node.js利用socket.io實(shí)現(xiàn)多人在線匹配聯(lián)機(jī)五子棋

    node.js利用socket.io實(shí)現(xiàn)多人在線匹配聯(lián)機(jī)五子棋

    這篇文章主要介紹了node.js利用socket.io實(shí)現(xiàn)多人在線匹配聯(lián)機(jī)五子棋的操作方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-05-05
  • Node環(huán)境中JS代碼缺少window對象的原因和解決方案

    Node環(huán)境中JS代碼缺少window對象的原因和解決方案

    你可能會(huì)在某些情況下需要在Node環(huán)境下運(yùn)行JavaScript代碼,但你也可能會(huì)遇到一個(gè)常見的問題:缺少window環(huán)境,在本文中,我們將深入探討這個(gè)問題的原因,并提供解決方案,需要的朋友可以參考下
    2023-08-08

最新評論