javascript - Node.js 事件应用程序

标签 javascript node.js events

我在理解 Node.js 中事件的应用时遇到了一些困难。考虑以下标准自定义 EventEmitter 实现:

var EventEmitter = require('events').EventEmitter;
var util = require('util');

function SimpleEE() {
    var self = this;
    self.val = false;
    EventEmitter.call(this);
}

util.inherits(SimpleEE, EventEmitter);

SimpleEE.prototype.changeVal = function() {
    self.val = !self.val;
    self.emit('valChanged', self.val);
}

SimpleEE.on('valChanged', function(newVal) {
    console.log('val was changed to ' + newVal);
});

在这种情况下,我不认为拥有监听器有什么意义。假设您希望每次事件发生时都执行相同的操作,为什么不使用监听器的回调函数来代替 emit() 调用呢?

这让我感到困惑的原因是因为我最初认为事件是为了跨模块通信;即,当另一个模块中发生适当的操作时,一个模块将收到警报。但是,根据我的理解,发射器和监听器必须注册在同一个 EventEmitter 实例下才能工作。

感谢您帮助我理解。

最佳答案

如果你想使用跨模块,你应该导出你的类,并在外部创建它的实例。例如

 module.exports = SimpleEE

外面

SimpleEE =  require("yourModule")
var instance  = new SimpleEE()
instance.on("valChanged",function(){})
instance.changeVal("22");

或者创建一个 singleTone 以便导出创建的实例

 module.exports = new SimpleEE()

外部

SimpleEE =  require("yourModule")

SimpleEE.on("valChanged",function(){})
SimpleEE.changeVal("22");

您可以在这里查看How do you share an EventEmitter in node.js?获取有关触发和监听全局事件的信息

关于javascript - Node.js 事件应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24860873/

相关文章:

node.js - Azure Functions,缩略图尺寸大于原始图像

javascript - querySelectorAll 包含 self

javascript - 在 javaScript 中使用 onclick() 调用 2 个不同的 div

node.js - 具有工作队列设计模式的 API

mysql - 我可以在触发器中创建事件吗?

android - 在没有root的情况下在Android中注入(inject)事件

c# - 从后台工作人员登录MyLogger时发生跨线程InvalidOperationException

javascript - 在 mousemove 上交换多个图像

javascript - 网络 worker sleep

node.js - 在 Node.js 中生成唯一 ID 的最佳方法是什么?