中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Node.js中的events事件模塊怎么使用

發布時間:2021-12-07 09:35:55 來源:億速云 閱讀:195 作者:iii 欄目:web開發

本篇內容主要講解“Node.js中的events事件模塊怎么使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Node.js中的events事件模塊怎么使用”吧!

Node.js中的events事件模塊怎么使用

引用官方說明:Node.js 的大部分核心 API 都是圍繞慣用的異步事件驅動架構構建的,在該架構中,某些類型的對象(稱為"觸發器")觸發命名事件,使 Function 對象("監聽器")被調用。

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

1. 什么是事件驅動?

事件驅動,簡單來說就是通過有效方法來監聽事件狀態的變化,并在發生變化時做出相應的動作。

舉一個生活應用的場景來理解:當我們去飯店吃飯點餐,當我們下單之后,服務員告訴我們的訂單號(這時候可以理解為注冊了一個事件),我們在坐著等候,這時候我們的耳朵就一直監聽著服務員的喊號,當喊到我們的時候,我們可以去前臺取餐。

2. 事件模型

NodeJS的事件架構采用經典的--訂閱發布模式

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

3. events模塊

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. Events模塊核心API

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)以指示無限數量的監聽器。

5. 同步異步的問題

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

6.錯誤處理

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事件模塊怎么使用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

且末县| 兰西县| 凤山县| 渝北区| 泸水县| 霞浦县| 隆化县| 定西市| 高唐县| 吉木乃县| 宁阳县| 大足县| 栖霞市| 普兰县| 安阳市| 东方市| 花莲县| 青州市| 西华县| 喜德县| 甘孜县| 措美县| 武隆县| 开江县| 漯河市| 石楼县| 互助| 本溪市| 平潭县| 长海县| 玉门市| 韶关市| 丰县| 麦盖提县| 乐山市| 杭州市| 拉萨市| 铅山县| 习水县| 连山| 本溪市|