node.js 中 emit() 和 on() 的一个小发现

时间:2019-02-11
本文章向大家介绍node.js 中 emit() 和 on() 的一个小发现,主要包括node.js 中 emit() 和 on() 的一个小发现使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

node 中的 EventEmitter 类提供了监听事件的方法 on(event, listener) 和 触发事件的方法 emit(event, [arg1], [arg2], […])

emit触发信号之后,on监听到事件后程序是如何执行的呢?

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

var connectHandler = function (){
    console.log("data_received");
    eventEmitter.emit("data_received");
}
eventEmitter.on("data_received",function(){
    console.log("data_receive ---> connection");
    eventEmitter.emit("connection");

});

eventEmitter.on("connection",function(){
    console.log(" connection ---> test");
    eventEmitter.emit("test");


});
eventEmitter.on("test",function(){

    console.log("I have listened test");

});

connectHandler();


console.log("end");

上面的代码中有三个 on() 监听事件,其中两个的回调函数内又有新的 emit()。 若按照上面代码的顺序进行执行,console中的结果是 

data_received 
data_receive ---> connection 
connection ---> test 
I have listened test 
end 

但是如果将connectHandler中和 on中的console.log 和 emit调换顺序的话,运行会得到相反的结果:

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

var connectHandler = function (){
    eventEmitter.emit("data_received");
    console.log("data_received");

}
eventEmitter.on("data_received",function(){
    eventEmitter.emit("connection");
    console.log("data_receive ---> connection");
});

eventEmitter.on("connection",function(){
    eventEmitter.emit("test");
    console.log(" connection ---> test");

});
eventEmitter.on("test",function(){

    console.log("I have listened test");

});

connectHandler();


console.log("end");

I have listened test 
connection ---> test 
data_receive ---> connection 
data_received 
end 

这个结果说明,在emit触发事件之后,会先寻找是否存在对应的事件监听,如果有优先执行其回调函数,执行完毕后才会返回值。
--------------------- 
作者:勰-CLEXMA 
来源:CSDN 
原文:https://blog.csdn.net/qq1024407215/article/details/61250705 
版权声明:本文为博主原创文章,转载请附上博文链接!