• Node.js Video Tutorials

NodeJS - emitter.off() 方法


emitter.off() 方法將從名為 eventName 的事件的監聽器陣列中移除指定的監聽器函式。

此方法將從監聽器陣列中移除最近新增的監聽器函式例項。如果一個監聽器被多次新增到名為 eventName 的事件的監聽器陣列中,則應多次呼叫 emitter.off() 方法以從監聽器陣列中移除每個例項。

此方法屬於 Eventemitter 類,它是 node:events 模組的內建類。

語法

以下是 NodeJs emitter.off() 方法的語法:

emitter.off(eventName, listener)

引數

此方法接受如下所述的兩個引數。

  • eventName:這是方法的第一個引數,它儲存事件的名稱。它可以是字串或符號。
  • listener:此引數儲存回撥函式。

返回值

此方法返回對 EventEmitter 的引用,以便可以連結呼叫。

示例 1

以下是 NodeJs emitter.off() 方法的基本示例。

在這裡,我們建立了一個包含訊息的函式 f1(),透過呼叫 emitter.on() 方法並將 eventName (event) 作為第一個引數傳遞來呼叫它,並將 (f1) 傳遞給方法的 listener 函式引數。因此,該函式被新增到監聽器陣列中。然後,我們使用 eventName (event) 和 f1() 函式呼叫了 myEmitter.off() 方法。因此,當我們編譯並執行程式時,myEmitter.off() 方法將移除名為“event”的事件的監聽器函式 f1()。

const EventEmitter = require('node:events');
const myEvent = new EventEmitter();

function one(){
  console('Welcome to Earth');
};

myEvent.on('event', one);

console.log(myEvent.eventNames());

輸出

以上程式產生以下輸出:

Program did not output anything!

示例 2

以下是將 eventName 和 listener 函式的類似組合傳遞給 myEmitter.on() 方法的程式。這將導致監聽器函式被新增到監聽器陣列中並多次呼叫。因此,函式 f1() 被四次新增到監聽器陣列中。然後,我們兩次使用與在 myEmitter.on() 方法中傳遞的 eventName 和 listener 函式相同的組合呼叫了 myEmitter.off() 方法。因此,只有兩個監聽器函式 f1() 例項將被移除。

const EventEmitter = require('node:events');

const myEmitter = new EventEmitter();

function f1(){
    console.log('Welcome to tutorialspoint');
}

myEmitter.on('event', f1);
myEmitter.on('event', f1);
myEmitter.on('event', f1);
myEmitter.on('event', f1);

myEmitter.off('event', f1);
myEmitter.off('event', f1);

myEmitter.emit('event'); 

輸出

以上程式產生以下輸出:

Welcome to tutorialspoint
Welcome to tutorialspoint

示例 3

在此程式中,我們為單個事件 (event) 多次添加了單個監聽器函式 (f1)。然後,我們使用名為“event”的事件和監聽器 f1() 呼叫了 myEmitter.off() 方法。如果我們編譯並執行程式,off() 方法將移除最近新增的例項。在這裡,將移除 myEmitter.on('event')。

const EventEmitter = require('node:events');

const myEmitter = new EventEmitter();

function f1(){
    console.log('Bye');
}

myEmitter.once('event', f1);
myEmitter.addListener('event', f1);
myEmitter.on('event', f1);

myEmitter.off('event', f1);

myEmitter.emit('event');

輸出

以上程式產生以下輸出:

Bye
Bye
nodejs_events.htm
廣告