Articles of eventemitter

如何等待,直到多个EventEmitter实例在Node.js中发出相同的事件?

我正在研究一个Node.js模块/实用程序,这将允许我脚手架一些目录/文件。 长话短说,现在我有这样的主要function: util.scaffold("FileName") 这个“脚手架”方法返回一个EventEmitter实例,所以,当使用这个方法时,我可以做这样的事情: util.scaffold("Name") .on("done", paths => console.log(paths) 换句话说,当所有的文件被创build时,事件“完成”将被发射与脚手架文件的所有path。 一切都很好迄今。 现在,我正在试图用这个方法做一些testing和基准testing,我试图find一个方法来执行一些操作(断言,日志等),这个“脚手架”方法已被多次调用不同的“名称”的说法。 例如: const names = ["Name1", "Name2", "Name3"] const emitters = names.map(name => { return util.scaffold(name) }) 如果我正在返回Promise而不是EventEmitter,我知道我可以这样做: Promise.all(promises).then(()=> { //perform assertions, logs, etc }) 但是,我不知道如何使用EventEmitter来做同样的事情。 换句话说,我需要等到所有这些发射器发出这个相同的事件(即“完成”),然后再执行另一个操作。 任何想法/build议如何做到这一点? 提前致谢。

如何处理http.get响应中未被捕获的exception

我有这个代码使用API​​从第三方网站下载新闻提要。 它的设置每5秒运行一次,并且可能会发生任何新闻交易。 这个问题似乎是在没有发生新的事务时。 通过添加process.on('未捕获的exception',函数(error){console.log(“hmph”)})cron作业能够在5秒后继续,所以我被诱惑离开它。 然而,我添加了console.log(“hmph”)到现在我很困惑。 第一次,控制台会写hmph。 5秒钟后它会写hmph hmph 等等。 我知道我一定错过了一些东西,但我不太清楚它是什么。 我已经尝试在else语句中执行request.end(),但错误仍然激发。 没有process.on('uncaught …')抛出的错误是: events.js:71个参数[1]; //未处理的错误事件^错误:在TCP.onread(net.js:403:27)的Socket.socketOnData(http.js:1367:20) 用proccess.on('uncaught …')console.log(错误)是: {[Error:Parse Error] bytesParsed:161,code:'HPE_INVALID_CONSTANT'} 我如何正确处理这个错误? 缩写代码: var job = new cronJob('*/5 * * * * *', function(){ var request = http.get({ host: 'www.example.com', path: '/news_feed?apicode=myapicode', port: 80, headers: { 'accept-encoding': 'gzip' } }) request.on('response', function(response){ if (response.statusCode == 200){ […]

在Node.js中使对象实例可观察

背景 考虑以下: var EventEmitter = require('events').EventEmitter; var util = require('util'); function MyClass() { EventEmitter.call(this); } util.inherits(MyClass, EventEmitter); MyClass.prototype = { method1: function() { this.emit('method1'); } } module.exports = MyClass; 这里的目标是require这个模块,并创build所有“可观察”的实例,因为它们的事件可以将数据传递给处理这些事件的其他对象。 我使用这个模块是这样的: var MyClass = require('./my-module-index'); var instance = new MyClass(); instance.method1(); 这里有一个问题: 调用method1引发错误: TypeError: undefined is not a function 其堆栈跟踪指向emit呼叫。 题 这应该是一个单例类,以实现可观察的行为,还是有一些微妙的事情,让实例发出事件,可以在其他地方处理? 我通常会认为这是一个范围问题,但由于该方法在对象的原型上, this应该指任何实例(提供了new的)。

其他模块中的节点事件发射器

我有3个不同的JavaScript文件,最小的一个发出一个事件,同时第二个(较大的)文件拾取事件,并进一步发送到主文件。 这是我迄今为止所尝试的: //mini.js var EventEmitter = require('events').EventEmitter; var ee = new EventEmitter; console.log("Emitting event"); var message = "Hello world"; ee.emit('testing',message); //second.js var mini = require('./mini.js'); var EventEmitter = require('events').EventEmitter; var ee = new EventEmitter; mini.on('testing',function(message){ console.log("Second file received a message:",message); console.log("Passing further"); ee.emit('testing',message); }); //main.js var sec = require('./second.js'); sec.on('testing',function(message){ console.log("Main file received the message",message); […]

使用Socket IO在Node JS进程完成时发出消息

如何使用Socket IO和Express + Nodejs,以便在用户login时,我在MEAN栈应用程序的后台运行MongoDb更新查询。 我必须通知用户MongoDb进程已经以非阻塞的方式完成。 我不想使用callback,因为我必须将用户redirect到login页面,而无需等待此查询完成。 所以,如果这个MongoDb进程在用户login后的30秒之后完成,我想要刷新一条消息,说明已经完成了查询更新。 我已经设置套接字IO,但我不知道如何使用它,我的特殊情况。 Express +节点代码 io.on('connection', function(client) { console.log('Client connected…'); client.on('complete', function(data) { client.emit('messages', 'Hello from server'); }); }); 以下是我的AngularJs代码。 var socket = io.connect('/socketTest'); socket.on('connect', function(data) { socket.emit('complete', 'Mongo Process Done'); }); 这些是我从网站上复制的例子,我真的不明白需要做什么才能在客户端捕获这个事件。

在模块之间共享事件

为了简单起见,我创build了一些小文件来testing这个想法。 基本上,我正在寻找一种方式来发射和事件的模块,然后在主文件中拿起例如 这是调用运行应用程序的主要文件 main.js var test = require('./test') var emitter = require('./emitter') var emit = new emitter() emit.on('response', function(data) { console.log(data) }) 这是事件发生的地方 fire.js var emitter = require('./emitter') var emit = new emitter var Test = function() { emit.sendEvent('response', 'test') } module.exports = Test 这里是创build的模块来处理应用程序事件触发 emitter.js var util = require('util') var eventEmitter = require('events').EventEmitter function […]

节点服务器启动时parsingjson对象

当节点server.js(这是我的入口点)开始时,我需要parsingjson对象,json文件的parsing是在我的项目的diffrent模块中完成的。 我有两个问题 build议使用server.js文件中的事件调用parsing函数 我读了关于event.emiter,但不知道如何从不同的模块调用函数…例子将是非常有益的 我有多个JSON文件 更新使其更清楚 如果我读取3个json文件对象(每行50个),当服务器/应用程序加载(server.js文件),这将是快速的我猜。 我的情况是,快速调用的有效path的列表是在这个JSON文件 app.get('/ run1',function(req,res){res.send('Hello World!');}); 所以run1应该在json文件中定义 (如path的白名单 ),如果用户把我没有定义的run2我需要提供错误,所以我认为,当服务器是要做这个调用,并保持与所有configuration有效的objpath和当用户打电话只是得到这个对象哪个alreayparsing(当服务器加载),并validation是否可以,我认为它更好的方法,而不是这样做 更新2 我会尝试更简单的解释。 让我们假设你有一个你应该听的path的白名单 ,比如run1 app.get('/run1', function 这些path列表是在特定文件夹下的项目中的jsons文件中定义的,在每次通过express对应用程序进行调用之前,都应该validation所请求的path是否位于json的path列表中。 这是给出的 。 现在该怎么做。 目前我已经开发了一个模块来查找这个json文件,并且在那里find特定的path。 现在我认为正确的解决scheme是,当节点应用程序开始调用这个function,并在一些对象中保存有效path列表时,在用户调用期间我可以非常容易地访问它,并检查path是否存在。 我的问题是如何在节点应用程序(Server.js)提供此对象时向validation程序模块提供一些事件。

本emit不工作,但self.emit正在工作。 为什么?

以下node.js脚本不起作用 var EventEmitter = require('events').EventEmitter; var util = require('util'); var TickE = function() { } util.inherits(TickE, EventEmitter); //TickE.prototype.__proto__ = EventEmitter.prototype; TickE.prototype.ticker = function() { var self = this; setInterval (function () { self.emit('tick'); }, 1000); }; var t = new TickE (); //console.log (util.inspect(t)); t.on('tick', function() { console.log ('Tick…');}); t.ticker(); 如果我像下面那样调用emit方法,那就不行了 TickE.prototype.ticker = function() { […]

什么时候应该使用EventEmitter?

我读了很多关于EventEmitter的东西。 但我不知道在哪种情况下,我需要在我的Node.js应用程序中使用它。

将全局variables传递给JavaScript中的事件callback函数?

在下面的代码中,我试图让mydata传递给callbackmydata 。 这是一个更大的问题,我有一个示例问题。 我假设这是一个范围问题。 我的代码有什么问题和/或我应该怎么做? var EventEmitter = require('events').EventEmitter; var myevent = new EventEmitter(); var mydata = 'my data!'; function myfunc (data, mydata) { console.log(data); console.log(mydata); }; myevent.on('data', function(data, mydata) {myfunc(data,mydata)}); myevent.emit('data', "data!"); 收益: data! undefined 我希望它回来: data! my data!