當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Node.js EventEmitter emitter.removeListener(eventName, listener)用法及代碼示例

emitter.removeListener(eventName, listener)

添加於:v0.1.26

參數

從名為 eventName 的事件的偵聽器數組中刪除指定的 listener

const callback = (stream) => {
  console.log('someone connected!');
};
server.on('connection', callback);
// ...
server.removeListener('connection', callback);

removeListener() 最多會從監聽器數組中移除一個監聽器實例。如果任何單個偵聽器已多次添加到指定 eventName 的偵聽器數組中,則必須多次調用 removeListener() 以刪除每個實例。

一旦一個事件被發射,所有在發射時附加到它的監聽器都會被依次調用。這意味著任何 removeListener()removeAllListeners() 在發出之後和最後一個偵聽器完成執行之前的調用都不會將它們從正在進行的 emit() 中刪除。後續事件按預期運行。

const myEmitter = new MyEmitter();

const callbackA = () => {
  console.log('A');
  myEmitter.removeListener('event', callbackB);
};

const callbackB = () => {
  console.log('B');
};

myEmitter.on('event', callbackA);

myEmitter.on('event', callbackB);

// callbackA removes listener callbackB but it will still be called.
// Internal listener array at time of emit [callbackA, callbackB]
myEmitter.emit('event');
// Prints:
//   A
//   B

// callbackB is now removed.
// Internal listener array [callbackA]
myEmitter.emit('event');
// Prints:
//   A

因為偵聽器是使用內部數組管理的,所以調用它會更改在偵聽器被刪除後注冊的任何偵聽器的位置索引。這不會影響調用偵聽器的順序,但這意味著需要重新創建 emitter.listeners() 方法返回的偵聽器數組的任何副本。

當單個函數多次添加為單個事件的處理程序時(如下例所示),removeListener() 將刪除最近添加的實例。在示例中,once('ping') 監聽器被移除:

const ee = new EventEmitter();

function pong() {
  console.log('pong');
}

ee.on('ping', pong);
ee.once('ping', pong);
ee.removeListener('ping', pong);

ee.emit('ping');
ee.emit('ping');

返回對 EventEmitter 的引用,以便可以鏈接調用。

相關用法


注:本文由純淨天空篩選整理自nodejs.org大神的英文原創作品 emitter.removeListener(eventName, listener)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。