我在节点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()
这样的简单调用函数来实现同样的功能吗?
答案 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 就会发出更新事件。 (调用所有注册的回调)