最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

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

2. 事件模型

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

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

3. events模塊

events模塊是NodeJS非常重要的一個模塊,在node中大部分的模塊的實現(xiàn)都繼承了Events類,如fs,http,net等。它提供了一個對象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)

可以注冊一個監(jiān)聽器,該監(jiān)聽器最多為特定事件調(diào)用一次。 一旦事件被觸發(fā),則監(jiān)聽器就會被注銷然后被調(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)聽器,一個事件可以有多個監(jiān)聽,需要全部移除時,可以用此方法。

參數(shù):

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

需要特別注意的是,如果不傳參數(shù),將會移除所有的監(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)

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

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

5. 同步異步的問題

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

6.錯誤處理

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

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

作為最佳實踐,應始終為 '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事件模塊知識點總結(jié)的文章就介紹到這了,更多相關(guān)Node.js中的events事件模塊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Nodejs+Socket.io實現(xiàn)通訊實例代碼

    Nodejs+Socket.io實現(xiàn)通訊實例代碼

    本篇文章主要介紹了Nodejs+Socket.io實現(xiàn)通訊實例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • 從零學習node.js之簡易的網(wǎng)絡(luò)爬蟲(四)

    從零學習node.js之簡易的網(wǎng)絡(luò)爬蟲(四)

    簡單的爬蟲實現(xiàn)原理很簡單:發(fā)送http請求至目標地址獲取HTML頁面數(shù)據(jù),然后從獲取來的頁面數(shù)據(jù)中提取需要的數(shù)據(jù)保存。下面這篇文章主要介紹了利用node.js實現(xiàn)簡易的網(wǎng)絡(luò)爬蟲的相關(guān)資料,需要的朋友可以參考下。
    2017-02-02
  • Node.js中require的工作原理淺析

    Node.js中require的工作原理淺析

    這篇文章主要介紹了Node.js中require的工作原理淺析,通過分析node.js的源碼得到本文,需要的朋友可以參考下
    2014-06-06
  • nodejs redis 發(fā)布訂閱機制封裝實現(xiàn)方法及實例代碼

    nodejs redis 發(fā)布訂閱機制封裝實現(xiàn)方法及實例代碼

    這篇文章主要介紹了nodejs redis 發(fā)布訂閱機制封裝的相關(guān)資料,這里提供了實現(xiàn)方法,及實例代碼,具有參考價值,需要的朋友可以參考下
    2016-12-12
  • nodejs圖片處理工具gm用法小結(jié)

    nodejs圖片處理工具gm用法小結(jié)

    這篇文章主要介紹了nodejs圖片處理工具gm用法小結(jié),詳細的介紹了gm的使用,還有圖片處理的實例,非常具有實用價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-12-12
  • 詳解Node使用Puppeteer完成一次復雜的爬蟲

    詳解Node使用Puppeteer完成一次復雜的爬蟲

    這篇文章主要介紹了詳解Node使用Puppeteer完成一次復雜的爬蟲,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • nodejs語言實現(xiàn)驗證碼生成功能的示例代碼

    nodejs語言實現(xiàn)驗證碼生成功能的示例代碼

    這篇文章主要介紹了nodejs語言實現(xiàn)驗證碼生成功能的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-10-10
  • node.js使用fs讀取文件出錯的解決方案

    node.js使用fs讀取文件出錯的解決方案

    在本篇文章里我們給大家?guī)硪黄P(guān)于node.js使用fs讀取文件出錯的解決辦法,有需要的朋友們參考下。
    2019-10-10
  • 快速了解Node中的Stream流是什么

    快速了解Node中的Stream流是什么

    今天小編就為大家分享一篇關(guān)于快速了解Node中的Stream流是什么,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • node-sass安裝失敗的原因與解決方法

    node-sass安裝失敗的原因與解決方法

    這篇文章主要給大家介紹了關(guān)于node-sass安裝失敗的原因與解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-09-09

最新評論

邯郸市| 津南区| 浦北县| 马山县| 罗田县| 新昌县| 治多县| 集贤县| 四川省| 城口县| 安龙县| 张掖市| 麻阳| 建平县| 齐齐哈尔市| 准格尔旗| 宿松县| 南平市| 杭州市| 仙游县| 扎赉特旗| 常山县| 哈密市| 康马县| 惠东县| 阳春市| 阜南县| 新龙县| 恩施市| 永济市| 中卫市| 徐汇区| 防城港市| 额济纳旗| 大新县| 广宗县| 遂溪县| 和政县| 正阳县| 托克逊县| 洮南市|