Articles of 事件处理

EventEmitter唤醒侦听器如何计数?

有关警告的问题Warning: Possible EventEmitter memory leak detected. 11 wakeup listeners added. Use emitter.setMaxListeners() to increase limit Warning: Possible EventEmitter memory leak detected. 11 wakeup listeners added. Use emitter.setMaxListeners() to increase limit Warning: Possible EventEmitter memory leak detected. 11 wakeup listeners added. Use emitter.setMaxListeners() to increase limit已经被问了很多。 但是,我没有得到唤醒听众如何计数? Node文档说: eventEmitter.on()方法用于注册侦听器,而eventEmitter.emit()方法用于触发事件。 https://nodejs.org/docs/latest/api/events.html#events_emitter_setmaxlisteners_n 那么,这段代码总结了6个eventEmitter.on(),那么怎么会产生这个警告呢? var express = require('express'); var […]

NodeJS – find未处理的承诺拒绝行

我正在使用一个事件处理程序来捕获在SO上发现的未处理的诺言拒绝: process.on('unhandledRejection', function(error, promise) { console.error('UNHANDLED REJECTION – Promise: ', promise, ', Error: ', error, ').'); }); 由于我使用的是nodejs + express,因此打印出代码语句的行号非常困难。 我有一个自定义的console.log2方法这样做,但我试图完成与拒绝处理程序相同。 我已经尝试了错误堆栈等各种调用方/堆栈跟踪技巧,但这些方法都没有正确显示reject()语句的行。 编辑 为了澄清,我得到的打印输出不断显示上面的console.error语句的行号(每次都是同一行),然后通过各种承诺库文件/行向后工作。 它完全跳过/忽略了reject()语句本身所在的行。

事件驱动的处理架构build议

我目前正在开发一个需要实时进行文件处理的项目。 这是我想要实现的工作stream程 a. User requests a file to be processed to Server A (web) b. Server A forwards the request to Server B c. Server B finishes and signals Server A that it's done d. Server A signals the user that the file is ready (web) 我在找什么? 我需要find一个简单的事件驱动的方式来在服务器A和服务器B(即步骤b和c)之间进行通信。 仅供参考,我将使用socket.io通过networking在步骤a和d与用户进行通信。 我将使用的环境是运行node.js服务的Ubuntu 14.04服务器(请注意,只要存在接口,解决scheme就不必严格控制节点)。 似乎很简单? 这是它变得复杂的地方。 每一组服务器(现在认为它们是networking服务器和处理服务器)都将在云中进行复制(每个服务器都是如此)。 需要注意的是,当一个处理服务器完成一个文件的处理时,它必须向所有的 […]

事件发射器,对象不是function

我在node.js中创build了一个事件,但是当我尝试触发事件并将parameter passing给callback时,我得到eventEmitter("dataIn", null, message); TypeError: object is not a function eventEmitter("dataIn", null, message); TypeError: object is not a function 。 看着类似的堆栈溢出问题的问题是不使用new创buildeventEmitter,但我是。 首先,我设置了事件。 var events = require('events').EventEmitter; var eventEmitter = new events(); 然后我设置callback。 function dataIn(config, callback) { if(typeof callback === 'function') { /* Set the callback for the dataIn event. */ eventEmitter.on("dataIn", callback); /* More code […]

在效率和优雅方面,添加和删除事件侦听器还是使用全局/高级variables来控制发射器事件逻辑更好?

为了澄清我的问题,下面是两个例子在javascript-esque伪代码。 这里是相同的例子,但有更多的代码来上下文化他们: http : //pastebin.com/fRjW5qp6 看看我是如何使用条件来防止套接字触发重要的事件逻辑后,他们已经触发过一次(例如,我已经设置了事件监听器触发后,socket.loginBuilt为true)。 socket.on('login screen built', socketLoginScreenBuilt); function socketLoginScreenBuilt() { // See how I'm using this conditional to prevent sockets from triggering the important event logic after they've already triggered it once (since I set socket.loginBuilt to true in the logic) if (!socket.loginBuilt) { numberOfSocketsWithBuiltLoginScreens++; socket.loginBuilt = true; if (numberOfSocketsWithBuiltLoginScreens === io.sockets.sockets.length) […]

在事件处理程序中读取和写入全局variables:什么时候是并发性问题?

我是Node.JS的新手,并开始阅读关于Node.js事件处理和并发性的几个主题。 下面的代码触发1000次事件,这是通过增加一个全局variables来处理的。 代码的第一位成功地计数到1000,但第二位甚至没有增加到2.是否有我没有得到的primefaces性? 我仍然想知道为什么下面的代码提供了连贯的输出(它没有任何并发​​地成功计数到1000: // Import events module var events = require('events'); // Event emitter var eventEmitter = new events.EventEmitter(); var max = 1000; var count = 0; eventEmitter.on('event', () => { let time = Math.trunc(Math.random() * 1000) +1; setTimeout(() => { var c = count; c++; count = c; console.log(c); }, time); }); // […]

Node.js重复监听器问题

我是node.js的新手,很难掌握事件监听器/发射器的dynamic。 我正在尝试为典型的“新闻源”应用设置一个简单的长轮询监听器。 我可以使用下面的代码注册和发送事件给听众。 我的问题是,每发生一个事件,它被推送到客户端多个(两个或更多!)次。 var http = require('http'), events = require('events'), url = require('url'); var event_emitter = new events.EventEmitter(); http.createServer(function(req,res) { var uriParse = url.parse(req.url,true); var pathname = uriParse.pathname; console.log(req.url); if (pathname=="//register") { var thisRes = res; event_emitter.addListener('event',function(actionid){ if (thisRes) { thisRes.writeHead(200, { "Content-Type": "text/plain" }); thisRes.end(actionid); thisRes = null; } }); } else if […]

在设立监听器之前会触发事件吗?

var a = new Image(); … // Is it possible that `load` happens here, so I won't be able to catch it? … a.onload = function () {}; 那么,我猜load事件将不会被触发。 浏览器如何神奇地确保通过循环运行代码? 那么事件只有在完成了本轮之后才会触发? 下面的代码将不会输出任何东西,是不是因为使用setTimeout我们让foo运行在另一轮 ? var a = require('child_process').spawn('ls', ['-l']); setTimeout(function foo() { a.stdout.on('data', function (data) { console.log(data.toString()); }); }, 1000);

范围内callback的最佳实践

通常,在“构造函数”中,您使用lambda函数来订阅事件: function Something(){ this.on('message', function(){ … }); } util.inherits(Something, events.EventEmitter); 这工作得很好,但延伸不好。 方法更好地inheritance: function Something(){ this.on('message', this._onMessage); } util.inherits(Something, events.EventEmitter); Something.prototype._onMessage = function(){ … }; 保留这些事件处理函数的最佳实践是什么?

node.js和routing:按类发出

新手问题如下: 我很难让EventEmitter工作。 我已经考虑过这样的文档和几个最好的教程: https : //code.tutsplus.com/tutorials/managing-the-asynchronous-nature-of-nodejs-net-36183 问题是,在user.js(Class)this.emit()中没有任何结果。 userRoutes.js不触发任何user.on(),我真的不知道为什么.. 任何build议表示赞赏。 提示更好的结构也。 我的目标是集中端点(可读性强),并在不同模块中重用每个模块(如用户或产品/订单)的代码,例如调用更新用户端点的订单。 所以,假设你有一个模块configuration的node.js-Server,路由器和几个类,如下所示: /server.js global.__base = __dirname + "/"; var server = require("http").createServer(); var routes = require("./v2"); var initialize = require(global.__base + "config"); var app = initialize.globalModules(); app.use('/api/v2', routes); app.listen('8090'); /config.js var db; module.exports = { globalModules: function() { // load the global modules var app […]