簡體   English   中英

Nodejs事件發射器程序中語句的執行順序

[英]Order of execution of statements in Nodejs event emitter program

我嘗試了以下 NodeJs 示例:

const EventEmitter = require('events');
var eventEmitter = new EventEmitter();

var fun1 = (msg) => {
    console.log("Message from fun1: " + msg);
};
var fun2 = (msg) => {
    console.log("Message from fun2: " + msg);
};

eventEmitter.on('myEvent', fun1);
eventEmitter.on('myEvent', fun1);
eventEmitter.on('myEvent', fun2);

eventEmitter.removeListener('myEvent', fun1);
eventEmitter.emit('myEvent', "Event occurred");
console.log(eventEmitter.listenerCount('myEvent'));
eventEmitter.removeAllListeners('myEvent');
console.log(eventEmitter.listenerCount('myEvent'));

eventEmitter.emit('myEvent', "Event occurred");

Output 是:

來自 fun1 的消息:事件發生

來自 fun2 的消息:事件發生

2

0

請幫助我理解 output,因為根據我的預期,不應該打印“來自 fun2 的消息:事件發生”行,因為我在它之前調用了 removeAllListeners。 並且,事件發射器函數被同步調用。 另外,如果事件發射器功能真的以同步方式執行,為什么所有控制台日志都在最后打印?

Nodejs 文檔說

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

這就是為什么它仍然打印計數為 2。因為對於事件“myevent”“fun1”和“fun2”仍有兩個活動的偵聽器。

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM