無涯教程: Node.js - 事件傳送

zybing發表於2021-09-09

Node中的許多物件都會發出事件,例如net.Server每次對等點連線到它時都會發出一個事件,而fs.readStream在檔案開啟時會發出一個事件。發出事件的所有物件都是events.EventEmitter的例項。

EventEmitter類

如上一節所述,EventEmitter類位於事件模組中。可透過以下程式碼訪問-

//Import events module
var events=require('events');
//Create an eventEmitter object
var eventEmitter=new events.EventEmitter();

當EventEmitter遇到任何錯誤時,它將發出"error"事件,新增新的偵聽器時,將觸發" newListener"事件,而當刪除偵聽器時,將觸發" removeListener"事件

EventEmitter提供了多個屬性,如 on 和 emit ,on 屬性用於將函式與事件繫結,而 emit 用於觸發事件。

EventEmitter方法

Sr.No. Method & 描述
1

addListener(event,listener)

在偵聽器陣列的末尾為指定事件新增一個偵聽器。

2

on(event,listener)

在偵聽器陣列的末尾為指定事件新增一個偵聽器。

3

once(event,listener)

向事件新增一次偵聽器,僅在下次觸發事件時才呼叫此偵聽器,然後將其刪除。

4

removeListener(event,listener)

從偵聽器陣列中刪除指定事件的偵聽器。

5

removeAllListeners([event])

刪除所有偵聽器,或指定事件的偵聽器。

6

setMaxListeners(n)

預設情況下,如果為特定事件新增了10個以上的偵聽器,則EventEmitters將列印警告。設定為零表示無限。

7

listeners(event)

返回指定事件的偵聽器陣列。

8

emit(event,[arg1],[arg2],[...])

使用提供的引數按順序執行每個偵聽器,如果事件具有偵聽器,則返回true,否則返回false。

Class 方法

Sr.No. Method & 描述
1

listenerCount( emitter,event)

返回給定事件的偵聽器數。

Events 事件

Sr.No. 大事記 & 描述
1

newListener

  • event    -  事件名稱

  • listener - 事件處理函式

每當新增偵聽器時都會發出此事件,觸發此事件後,可能尚未將偵聽器新增到該事件的偵聽器陣列中。

2

removeListener

  • event    - 字串事件名稱

  • listener - 函式事件處理函式

每當有人刪除偵聽器時,都會發出此事件,觸發此事件後,可能尚未從該事件的偵聽器陣列中刪除該偵聽器。

示例程式碼

使用以下Node.js程式碼建立一個名為main.js的js檔案-

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.');
}

//Bind the connection event with the listner1 function
eventEmitter.addListener('connection', listner1);

//Bind the connection event with the listner2 function
eventEmitter.on('connection', listner2);

var eventListeners=require('events').EventEmitter.listenerCount
   (eventEmitter,'connection');
console.log(eventListeners + " Listner(s) listening to connection event");

//Fire the connection event 
eventEmitter.emit('connection');

//Remove the binding of listner1 function
eventEmitter.removeListener('connection', listner1);
console.log("Listner1 will not listen now.");

//Fire the connection event 
eventEmitter.emit('connection');

eventListeners=require('events').EventEmitter.listenerCount(eventEmitter,'connection');
console.log(eventListeners + " Listner(s) listening to connection event");

console.log("Program Ended.");

現在執行main.js以檢視輸出-

$node main.js

驗證輸出。

2 Listner(s) listening to connection event
listner1 executed.
listner2 executed.
Listner1 will not listen now.
listner2 executed.
1 Listner(s) listening to connection event
Program Ended.


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/855/viewspace-2807037/,如需轉載,請註明出處,否則將追究法律責任。

相關文章