Tag: eventemitter

NodeJS等待callback完成事件发射

我有和应用程序写在NodeJS与Express,并试图使用EventEmitter来创build一种插件体系结构,通过侦听发出的事件插入到主代码的插件。 我的问题是当一个插件函数发出一个asynchronous请求(在这种情况下从mongo获取数据)时,这会导致插件代码完成并返回到原始发射器,然后在插件代码中的asynchronous请求之前完成执行饰面。 例如: 主应用程序: // We want to modify the request object in the plugin self.emit('plugin-listener', request); 插入: // Plugin function listening to 'plugin-listener', 'request' is an arg console.log(request); // Call to DB (async) this.getFromMongo(some_data, function(response){ // this may not get called until the plugin function has finished! } 我从“getFromMongo”函数回避主要代码的callback函数的原因是可能有0个或多个插件监听事件。 理想情况下,我想要一些方法来等待数据库的东西完成,然后返回到主应用程序的控制 非常感谢

Nodejs事件处理

以下是我的nodejs代码 var emitter = require('events'), eventEmitter = new emitter.EventEmitter(); eventEmitter.on('data', function (result) { console.log('Im From Data'); }); eventEmitter.on('error', function (result) { console.log('Im Error'); }); require('http').createServer(function (req, res) { res.end('Response'); var start = new Date().getTime(); eventEmitter.emit('data', true); eventEmitter.emit('error', false); while(new Date().getTime() – start < 5000) { //Let me sleep } process.nextTick(function () { console.log('This is event […]

如何检测一连串的相关事件完成,然后发出一个事件

我的第一个问题! 我真的很想问这个问题,所以请帮助我改进,如果我能更好地问。 这是我发现的似乎是远程相关的唯一问题,但我无法弄清楚如何将其与我正在尝试做的事情联系起来(他们的问题是特定于JQuery的;我的是Node.JS specific-ish [虽然我发现一个浏览器版本的EventEmitter,并且能够在浏览器中进行testing]): 使用jQuery为每个事件突发运行一次 问题 我有一个过程,我知道会在一段时间内发出一连串的事件。 为了模拟这个过程,我编写了这个代码: /*******************************************************/ /* This part taken directly from */ /* https://nodejs.org/api/events.html */ /* (with addition of "burstID") */ /* */ /* */ /* */ const EventEmitter = require('events'); /* */ /* */ /* */ /* */ class MyEmitter extends EventEmitter {} /* */ /* */ /* */ […]

在每个对象作为一个类的NodeJS游戏中,事件应该如何处理?

当在一个Javascript / NodeJS游戏中处理多个类时,我很难找出哪个类应该发出事件,哪些类应该听。 我正在按照本指南创build事件驱动的游戏: http : //pragprog.com/magazines/2011-08/decouple-your-apps-with-eventdriven-coffeescript 我正在写一个小游戏,并将我的课程分为以下控制器: 世界 – 创造游戏世界,并通过一系列“轮stream”来确定一些简单的游戏逻辑(即angular色应该移动,塔应该射击)。 塔 – 一个塔坐在一个10×10的网格,并有一个范围。 当一个物体进入射程,它可以射击。 暴徒(敌人) – 一个暴徒在10×10格子上产生并每3秒移动一次。 在某个时候,它在一个塔的范围内飘荡。 我一整天都在读EventEmitters,但似乎无法找出构build我的活动的正确方法。 如果暴徒在移动的时候发起了一个事件,那么这个塔就是在听“移动”事件呢? 或者,这个世界是否应该控制所有的事件和塔/小怪听世界? 请参阅下面的示例代码。 背景:我一直在为NodeJS开发一个简单的TowerD游戏,并决定首先实现服务器。 我将所有实体存储在MongoDB中,并使用地理空间计算来确定对象是否在范围内进行拍摄。 目前,我正在使用一个基本的3秒循环来“勾选”游戏和进度逻辑,但是我想转向一个真正的事件驱动模型,并且正在挣扎。 世界: exports.World = class World extends EventEmitter constructor: -> ### Initial config ### @gameTime = 3000 # every 3000ms, the game progresses ### Start the game!! ### @game = […]

如何使用.net MVC的Flux和事件发射器?

我正在学习Flux模式。 我学会了使用.net MVC的React并将其呈现在服务器端。 我想学习Flux,但所有教程都使用节点js。 我不使用节点。 我不知道如何实现Event Emitter部分,因为它使用了一个节点函数。 https://www.codementor.io/reactjs/tutorial/react-js-flux-architecture-tutorial 大约三分之一的下降: “事件发射器 – 事件发射器负责在存储完成任何数据动作之后通知订阅者,反之,它也需要能够注册观察者以用于特定的事件,我们将在待办事项应用程序中使用Node的事件发射器“。 考虑到Flux只是一个模式,是否有什么我可以使用.NET MVC,在没有节点,处理事件发射器的一部分? 感谢赞赏,谢谢。

Node.js EventEmitter:如何将类上下文绑定到事件侦听器,然后删除此侦听器

有没有办法访问事件监听器方法中的类上下文有可能删除监听器? 例1: import {EventEmitter} from "events"; export default class EventsExample1 { private emitter: EventEmitter; constructor(private text: string) { this.emitter = new EventEmitter(); this.emitter.addListener("test", this.handleTestEvent); this.emitter.emit("test"); } public dispose() { this.emitter.removeListener("test", this.handleTestEvent); } private handleTestEvent() { console.log(this.text); } } 在这个例子中,删除侦听器的工作,但handleTestEvent()方法没有使用this类上下文的访问。 this指向EventEmitter上下文,所以this.text不可访问。 例2: import {EventEmitter} from "events"; export default class EventsExample2 { private emitter: EventEmitter; constructor(private text: […]

创build自定义EventEmitter时是否需要events.EventEmitter.call(this)?

在自定义事件发射器构造函数中有很多不使用events.EventEmitter.call(this)的例子,而其他的则使用它( 官方文档 ): var events = require('events') , util = require('util'); var MyEmitter = function () { events.EventEmitter.call(this); }; util.inherits(MyEmitter, events.EventEmitter); MyEmitter.prototype.write = function () { this.emit('tick'); }; 随着我对JavaScript的基本理解,我不知道是否需要它。 是否需要调用EventEmitter初始化的东西?

React Flux调度器vs Node.js EventEmitter – 可扩展?

当你使用Node的EventEmitter时,你订阅一个事件。 您的callback仅在特定事件启动时执行: eventBus.on('some-event', function(data){ // data is specific to 'some-event' }); 在Flux中,您向调度员注册您的商店,然后当每个事件被调度时,您的商店被调用。 商店的任务是过滤每一个事件,并确定事件对商店是否重要: eventBus.register(function(data){ switch(data.type){ case 'some-event': // now data is specific to 'some-event' break; } }); 主持人在录像中说: 实际上,所有商店都会收到所有的动作,这就是保持可扩展性的原因。“ 题 为什么以及如何向每个商店发送每个动作(大概)比只向特定商店发送动作更具可扩展性?

Node.JS EventEmitter监听器必须是一个函数

尝试在函数中设置侦听器时出现错误。 我已经回顾了其他代码,这可以工作,但似乎无法得到它为我的目的工作。 这是我试图完成的简化版本。 var ticketGenerator = function(){ var self = this; console.log('ticket generator'); var rows = ""; this.emit("getQueue") var _getQueue = function(){ console.log('Getting Queue'); var connection = mysql.createConnection({ //Connection Data }); connection.connect(); connection.query("SELECT * FROM `queue` WHERE `run` = 0 ORDER BY `queueID` ASC LIMIT 1", function(err, rows, fields){ if(err){ //self.emit("error", "Unable to get data […]

Node.js EventEmitter事件不共享事件循环

也许潜在的问题是,我使用的节点卡夫卡模块如何实现的东西,但也许不是,所以我们走了… 使用节点kafa库,我遇到了订阅consumer.on('message')事件的问题。 该库正在使用标准events模块,所以我认为这个问题可能是足够通用的。 我的实际代码结构庞大而复杂,所以这里是一个基本布局的伪示例来突出我的问题。 (注:这个代码片段没有经过testing,所以我可能在这里有错误,但是这里的语法没有问题) var messageCount = 0; var queryCount = 0; // Getting messages via some event Emitter consumer.on('message', function(message) { message++; console.log('Message #' + message); // Making a database call for each message mysql.query('SELECT "test" AS testQuery', function(err, rows, fields) { queryCount++; console.log('Query #' + queryCount); }); }) 我在这里看到的是,当我启动我的服务器时,有十万左右积压的消息,卡夫卡会想要给我,它通过事件发射器。 所以我开始收到消息。 获取并logging所有消息大约需要15秒。 这是我期望看到的输出假设mysql查询是相当快的: […]