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

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

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

通過(guò)對(duì)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)單來(lái)說(shuō)就是通過(guò)有效方法來(lái)監(jiān)聽(tīng)事件狀態(tài)的變化,并在發(fā)生變化時(shí)做出相應(yīng)的動(dòng)作。

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

2. 事件模型

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

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

3. events模塊

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

簡(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)

注冊(cè)監(jiān)聽(tīng)事件

參數(shù):

eventName: 事件名稱(chēng)

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

4.2 eventEmitter.once(eventName, callback)

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

參數(shù):

eventName: 事件名稱(chēng)

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

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

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

參數(shù):

eventName: 事件名稱(chēng)

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

4.4 eventEmitter.removeListener(eventName, callback)

移除指定事件的監(jiān)聽(tīng)器,注意:該監(jiān)聽(tīng)器必須是注冊(cè)過(guò)的。否則無(wú)效。

參數(shù):

eventName: 事件名稱(chēng)

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

4.5 EventEmitter.removeAllListeners(eventName)

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

參數(shù):

eventName: 需要全部移除的事件名稱(chēng);

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

4.6 EventEmitter.listeners(eventName)

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

4.7 EventEmitter.eventNames()

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

4.8 EventEmitter.setMaxListeners(n)

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

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

5. 同步異步的問(wèn)題

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

6.錯(cuò)誤處理

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

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

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

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

相關(guān)文章

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

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

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

    從零學(xué)習(xí)node.js之簡(jiǎn)易的網(wǎng)絡(luò)爬蟲(chóng)(四)

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

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

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

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

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

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

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

    詳解Node使用Puppeteer完成一次復(fù)雜的爬蟲(chóng)

    這篇文章主要介紹了詳解Node使用Puppeteer完成一次復(fù)雜的爬蟲(chóng),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • nodejs語(yǔ)言實(shí)現(xiàn)驗(yàn)證碼生成功能的示例代碼

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

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

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

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

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

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

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

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

最新評(píng)論

衡南县| 南投县| 柘荣县| 沈丘县| 竹山县| 长阳| 武夷山市| 连云港市| 屯昌县| 宿迁市| 扶绥县| 原平市| 天台县| 株洲市| 思茅市| 辉南县| 濉溪县| 桐乡市| 新余市| 鲁山县| 应城市| 望城县| 定陶县| 高邮市| 绍兴县| 广丰县| 西乌珠穆沁旗| 寿阳县| 岚皋县| 永仁县| 商洛市| 威信县| 即墨市| 明光市| 寿阳县| 中西区| 禄丰县| 闸北区| 彝良县| 响水县| 定兴县|