何时在Node js中使用eventEmitter?

时间:2017-10-30 08:03:56

标签: javascript node.js events eventemitter

我在节点js中学习新概念,这是事件,但我找不到我应该使用它的地方,我想要任何真实的场景,我找不到任何文章或博客。

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

//Create an event handler:
var myEventHandler = function () {
  console.log('I hear a scream!');
}

//Assign the event handler to an event:
eventEmitter.on('scream', myEventHandler);
eventEmitter.on('test', function(){
    console.log("Testing event");
});

//Fire the 'scream' event:
eventEmitter.emit('scream');
eventEmitter.emit('scream');
eventEmitter.emit('test');

我可以通过像myEvenHandler()这样的简单调用函数来实现同样的功能吗?

2 个答案:

答案 0 :(得分:3)

是的,在您的情况下,您可以拨打myEventHandler(),但这只是一个天真的例子。想象一下,你想从发射器听不同的事件。例如,在Mongoose数据库库中:

mongoose.connect(databaseUrl); 

mongoose.connection.on('connected', function () {  
    //connected successfully
}); 

mongoose.connection.on('error',function (err) {  
    //connection error
}); 

mongoose.connection.on('disconnected', function () {  
    //disconnected
});

你可以将3个回调传递给connect()方法,但是使用EventEmitter你有一个更易读的代码(至少对我来说),它允许你在整个应用程序中有几个监听器。

答案 1 :(得分:1)

当您的代码中存在一对多关系时,它很有用。即:单个事件触发许多事情发生。

主要的好处是解耦你的代码,你可以在事件发射器上注册回调,而它永远不知道这些回调到底做了什么。我使用该模式的一个示例是 Flux 模式的自定义实现。 Dispatcher 会在其上注册回调,并且只要前端组件之一发生更改,Dispatcher 就会发出更新事件。 (调用所有注册的回调)