Tag: eventemitter

为发出的事件创build侦听器的闭包问题

我已经实现了封装与外部设备交互的驱动程序的对象。 当驱动程序收到数据时,它会发出一个事件。 当我开始时,我加载一个所有定义的驱动程序的列表。 然后我遍历定义来执行以下操作: 创build一个驱动实例, 听取司机的事件 告诉驱动程序连接。 作为发出事件的侦听器的一部分,我定义了一个函数来传递设备代表的一些细节。 但是,我的代码似乎有问题。 当一个驱动程序发出一个事件时,被触发的函数只显示一组细节。 这些细节是在for循环中定义的最后一个,我创build驱动程序并监听事件。 我创build了一个testing示例,通过使用几个简单的对象和计时器来重新创build我的问题。 这将需要在node.js中运行以查看问题。 var EventEmitter = require('events').EventEmitter; var util = require('util'); // define vehicle object function Vehicle(options) { options = options || {}; this.id = ((options.id != null) ? options.id : -1); this.name = ((options.name != null) ? options.name : 'unknown'); } util.inherits(Driver, EventEmitter); // […]

NodeJS eventEmitter.emit:这不是预期的范围

我想按照特定的顺序加载一些对象,比如先连接数据库,然后启动邮件服务,然后开始加载游戏的东西,最后我想启动networking服务器,所以在上线之前加载所有东西。 我做了这样一个链: db.on('ready', mail.init); mail.on('ready', game.init); game.on('ready', ws.start); db.init(); Db模块看起来像这样: var config = namespace('config'), mongoose = require('mongoose'), events = require('events'), util = require('util'); function DataBase() { events.EventEmitter.call(this); this.init = function() { self = this; mongoose.connect('mongodb://'+config.db.host+':'+config.db.port+'/'+config.db.database); mongoose.connection.on('error', console.error.bind(console, '[Database] ERROR:')); mongoose.connection.once('open', function() { console.log('[database] ready') self.emit('ready', {caller: 'database'}); }); } } util.inherits(DataBase, events.EventEmitter); module.exports = exports […]

使一个函数的行为像一个实例化的EventEmitter

我是作为JavaScript模块的主要API导出函数模式的狂热粉丝。 原因是在JS中,一个函数基本上可以做一个典型的对象可以做的事情,然后是一些事情。 所以这对我来说是典型的: function stuff() {} function thing() { /* shortcut or default behavior */ } thing.stuff = stuff; module.exports = thing; 现在我遇到了一个情况,我想让thing像EventEmitter的实例 一样 。 我不希望它是一个构造函数。 为什么? 那么thing会真的沿着osPreferences的行,用一些选项调用它将数据保存到磁盘。 用户实例化它没有任何意义。 new OSPreferences()不会有太多用处,因为您的计算机一次只能遵循一组偏好。 但是,在我的API以外,任何时候都可能发生变化。 所以有一个巨大的好处: osPreferences.on('change', fn); 所以问题是,什么是吸收EventEmitter 实例行为的可靠模式? 简单地遍历一次性实例的所有属性并将它们复制到目标函数是否足够好? 是否值得模仿inheritance的vs非inheritance的设置? 是否有任何奇怪的情况下考虑,因为默认情况下会改变? 还是有更好,更明智的方法?

node.js事件发射器绑定到多个实例

如果我有一个监听事件发射器的类,那么绑定每个实例是否是错误的做法? function MyClass() { emitter.on('ready', function() { // do something }); } myclass = new MyClass(); 如果我多次调用emitter.on(),它会发出警告。 (节点)警告:检测到可能的EventEmitter内存泄漏。 添加了11位听众。 使用emitter.setMaxListeners()来增加限制。 事件发射器意味着每个模块只绑定一次,而不是类实例? 如果这是错误的,那么当事件触发时,如何访问类实例? 谢谢

子类events.EventEmitter不起作用

如何inheritanceEventEmitter? 我正在尝试以下testing: var util = require('util') ,events = require('events'); function Downloader() { events.EventEmitter.call(this); } util.inherits(Downloader, events.EventEmitter); console.log(new Downloader() instanceof events.EventEmitter); // true Downloader.prototype.download = function(episode) { var self = this; var statusMessage = 'Downloading: ' + episode; self.emit('status', statusMessage); setTimeout(function() { var finishedMessage = 'Downloaded ' + episode; self.emit('finished', finishedMessage); }, 5000); } exports.Downloader = […]

SocketJ和NodeJS中的EventEmitter的相似/差异

我在nodejs中的Socket.io和EventEmitter API之间有点混淆。 是的,我在事件驱动的NodeJS编程方面很新颖。 这两者之间有什么重大的区别? 或者一个已经取得了另一个? 他们是为了相同的目的还是不同的? 任何示例/资源链接,说明它们之间的差异将是很好的..

这两个构造函数模式有什么区别?

Function ConstrA () { EventEmitter.call(this); } util.inherits(ConstrA, EventEmitter); VS Function ConstrA() {} util.inherits(ConstrA, EventEmitter); EventEmitter.call(这个)有什么需要的吗?

node.js eventEmitter + http.request

我做了这个教程node.js eventEmitter ,它很好地工作。 我添加了一个方法,使用http.request来获取数据,它的工作和发出的数据。 问题在于听众不能理解事件! 有人可以帮忙吗? 代码: var events = require('events'); var util = require('util'); var http = require('http'); //http request options, it query the twitter api and get the public timeline, works! var options = { hostname : 'api.twitter.com', port : 80, method : 'get', path : '/1/statuses/public_timeline.json?count=3&include_entities=true' } // The Thing That Emits […]

节点EventEmitter到EventEmitter发出。 多个发射器

我试图从一个EventEmitter发射到另一个EventEmitter,或者find一个替代解决scheme。 下面的代码不起作用。 多发射器的例子 var events = require('events'); var eventEmitterOne = new events.EventEmitter(); var eventEmitterTwo = new events.EventEmitter(); eventEmitterTwo.on('fireEvent', function() { console.log('event fired'); }); eventEmitterOne.emit('fireEvent'); 我正在寻找如果以下是可能的,以及我需要对下面的代码做出什么改变,使其function。 还是有另一种方式发射事件跨多个发射器。 谢谢你的时间。

Node.js EventEmitter和多层次的inheritance

我试图找出使用Node.js EventEmitter类时多级inheritance的最佳方法。 设置是我正在开发一个MVC框架的Node.js使用控制器,可以有基地控制器,但控制器可以发出的事件也发出同样的事件在其基本控制器。 到目前为止我有: var events = require('events'); var util = require('util'); var Controller = function() { }; util.inherits(Controller, events.EventEmitter); var baseController = new Controller(); baseController.on('request', function() { console.log('Calling request event on baseController'); }); var homeController = new Controller(); homeController.prototype = baseController; homeController.on('request', function() { console.log('Calling request event on homeController'); }); homeController.emit('request'); …但是只输出“ homeController上的调用请求事件 ”,我希望这两个“请求”事件触发。 […]