【问题标题】:When to use eventEmitter in Node js?何时在 Node js 中使用 eventEmitter?
【发布时间】:2018-04-11 03:36:45
【问题描述】:

我正在学习节点 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()这样的简单调用函数来实现相同的目标?

【问题讨论】:

    标签: javascript node.js events eventemitter


    【解决方案1】:

    是的,在你的情况下,你可以打电话给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,您的代码更具可读性(至少对我而言),并且它允许您在整个应用程序中拥有多个侦听器。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-20
        相关资源
        最近更新 更多