"newListener"事件没有触发

4

我正在尝试使用一些Node事件代码进行实验。

以下是代码,根据文档,“newListener”应该在每次添加侦听器到其内部侦听器数组之前触发,但它并没有按预期工作。

Node版本 - v6.11.0

var event = require("events");
var events = new event.EventEmitter();

function FunHello(){
    console.log("Hello World !!!!!!!!");
}

function FunGreet(){
    console.log("Good Morning !!!!!!!!");
}

events.on("sayHello",FunHello);

events.on("sayHello",FunGreet);

events.addListener("hello",function(){
    console.log("hello hello !!!!");
});

/****** newListener is added *********/
events.on("newListener", function (evtName, fn) {
   console.log("New Listener: " + evtName);
});

events.emit("sayHello");

console.log("No of listerns for the event sayHello : " + events.listenerCount("sayHello"));

events.emit("hello");

代码可在https://repl.it/Iqe4/0上获取。

2
如果将newListener代码移到其他addListener调用之上,它是否能正常工作? - Bobby Speirs
哦,是的,它有效。很酷……所以它必须位于所有事件监听器之上吗? - Edison Trutwein
2
当监听器被添加时,事件会触发。当您附加hello处理程序时,没有newListener处理程序。 - Bergi
1个回答

0
我认为你面临的问题是输出中没有newListener事件的输出。我尝试将newListener代码块移动到所有其他事件侦听器之上,这样就会得到所需的输出。以下是代码:
var event = require("events");
var events = new event.EventEmitter();

function FunHello(){
    console.log("Hello World !!!!!!!!");
}

function FunGreet(){
    console.log("Good Morning !!!!!!!!");
}

events.on("newListener", (evtName,fn)=>{
    console.log("New Listener: " + evtName);
 });


events.on("sayHello",FunHello);

events.on("sayHello",FunGreet);

events.addListener("hello",function(){
    console.log("hello hello !!!!");
});
events.emit("sayHello");

console.log("No of listerns for the event sayHello : " + events.listenerCount("sayHello"));

events.emit("hello"); 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接