
- Node.js 教程
- Node.js - 首頁
- Node.js - 簡介
- Node.js - 環境設定
- Node.js - 第一個應用程式
- Node.js - REPL 終端
- Node.js - 命令列選項
- Node.js - 包管理器 (NPM)
- Node.js - 回撥函式概念
- Node.js - 上傳檔案
- Node.js - 傳送電子郵件
- Node.js - 事件
- Node.js - 事件迴圈
- Node.js - 事件發射器
- Node.js - 偵錯程式
- Node.js - 全域性物件
- Node.js - 控制檯
- Node.js - 程序
- Node.js - 應用程式擴充套件
- Node.js - 打包
- Node.js - Express 框架
- Node.js - RESTFul API
- Node.js - 緩衝區
- Node.js - 流
- Node.js - 檔案系統
- Node.js MySQL
- Node.js - MySQL 入門
- Node.js - MySQL 建立資料庫
- Node.js - MySQL 建立表
- Node.js - MySQL 插入資料
- Node.js - MySQL 從表中選擇資料
- Node.js - MySQL Where 條件
- Node.js - MySQL Order By 排序
- Node.js - MySQL 刪除資料
- Node.js - MySQL 更新資料
- Node.js - MySQL 聯接
- Node.js MongoDB
- Node.js - MongoDB 入門
- Node.js - MongoDB 建立資料庫
- Node.js - MongoDB 建立集合
- Node.js - MongoDB 插入資料
- Node.js - MongoDB 查詢資料
- Node.js - MongoDB 查詢
- Node.js - MongoDB 排序
- Node.js - MongoDB 刪除資料
- Node.js - MongoDB 更新資料
- Node.js - MongoDB 限制結果
- Node.js - MongoDB 聯接
- Node.js 模組
- Node.js - 模組
- Node.js - 內建模組
- Node.js - 實用程式模組
- Node.js - Web 模組
- Node.js 有用資源
- Node.js - 快速指南
- Node.js - 有用資源
- Node.js - 討論
Node.js - 事件發射器
Node.js API 基於事件驅動的架構。它包含 events 模組,該模組提供了建立和處理自定義事件的功能。event 模組包含 EventEmitter 類。EventEmitter 物件發出命名事件。此類事件會呼叫監聽器函式。事件發射器在 Node.js 生態系統中起著至關重要的作用。Node 中的許多物件都會發出事件,例如,每次對等體連線到 net.Server 物件或連線關閉時,它都會發出事件。當檔案開啟、關閉、執行讀/寫操作時,fs.readStream 物件會發出事件。所有發出事件的物件都是 events.EventEmitter 的例項。
由於 EvenEmitter 類是在 events 模組中定義的,因此我們必須使用 require 語句將其包含在程式碼中。
var events = require('events');
要發出事件,我們應該宣告一個 EventEmitter 類的物件。
var eventEmitter = new events.EventEmitter();
當 EventEmitter 例項遇到任何錯誤時,它會發出“error”事件。當新增新的監聽器時,會觸發“newListener”事件,當移除監聽器時,會觸發“removeListener”事件。
序號 | 事件及描述 |
---|---|
1 | newListener(event, listener)
每次新增監聽器時都會發出此事件。當觸發此事件時,監聽器可能尚未新增到該事件的監聽器陣列中。 |
2 |
removeListener(event, listener)
每次有人移除監聽器時都會發出此事件。當觸發此事件時,監聽器可能尚未從該事件的監聽器陣列中移除。 |
EventEmitter 類中定義了以下例項方法:
序號 | 事件及描述 |
---|---|
1 | addListener(event, listener) 在指定事件的監聽器陣列末尾新增一個監聽器。返回發射器,以便可以連結呼叫。 |
2 | on(event, listener) 在指定事件的監聽器陣列末尾新增一個監聽器。與 addListener 相同。 |
3 | once(event, listener) 為事件新增一個一次性監聽器。此監聽器僅在下一次觸發事件時呼叫,之後將其移除。 |
4 | removeListener(event, listener) 從指定事件的監聽器陣列中移除一個監聽器。如果將任何單個監聽器多次新增到指定事件的監聽器陣列中,則必須多次呼叫 removeListener 以移除每個例項。 |
5 | removeAllListeners([event]) 移除所有監聽器,或指定事件的監聽器。最好不要移除在程式碼其他地方新增的監聽器,尤其是在您未建立的發射器(例如套接字或檔案流)上。 |
6 | setMaxListeners(n) 預設情況下,如果為特定事件添加了超過 10 個監聽器,則 EventEmitters 會列印警告。設定為零表示無限制。 |
7 | listeners(event) 返回指定事件的監聽器陣列。 |
8 | emit(event, [arg1], [arg2], [...]) 按順序使用提供的引數執行每個監聽器。如果事件有監聽器,則返回 true,否則返回 false。 |
9 | off(event, listener) removeListener 的別名 |
示例
讓我們定義如下兩個監聽器函式:
var events = require('events'); var eventEmitter = new events.EventEmitter(); // listener #1 var listner1 = function listner1() { console.log('listner1 executed.'); } // listener #2 var listner2 = function listner2() { console.log('listner2 executed.'); }
讓我們將這些監聽器繫結到連線事件。第一個函式 listener1 使用 addListener() 方法註冊,而我們使用 on() 方法繫結 listener2。
// Bind the connection event with the listner1 function eventEmitter.addListener('connection', listner1); // Bind the connection event with the listner2 function eventEmitter.on('connection', listner2); // Fire the connection event eventEmitter.emit('connection');
當使用 emit() 方法觸發連線事件時,控制檯會顯示監聽器中的日誌訊息,如上所示。
listner1 executed. listner2 executed.
讓我們從連線事件中移除 listener2 回撥,然後再次觸發連線事件。
// Remove the binding of listner1 function eventEmitter.removeListener('connection', listner1); console.log("Listner1 will not listen now."); // Fire the connection event eventEmitter.emit('connection');
控制檯現在顯示以下日誌:
listner1 executed. listner2 executed. Listner1 will not listen now. listner2 executed.
EventEmitter 類還具有 listCount() 方法。它是一個類方法,返回給定事件的監聽器數量。
const events = require('events'); const myEmitter = new events.EventEmitter(); // listener #1 var listner1 = function listner1() { console.log('listner1 executed.'); } // listener #2 var listner2 = function listner2() { console.log('listner2 executed.'); } // Bind the connection event with the listner1 function myEmitter.addListener('connection', listner1); // Bind the connection event with the listner2 function myEmitter.on('connection', listner2); // Fire the connection event myEmitter.emit('connection'); console.log("Number of Listeners:" + myEmitter.listenerCount('connection'));
輸出
listner1 executed. listner2 executed. Number of Listeners:2