问题标签 [eventemitter]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
169 浏览

javascript - Node.js - 事件不会触发?

我有一些代码应该监听某些事件并处理它们,但要么这些事件实际上从未发出,要么监听器永远不会捕获它们。

这里有两个模块:监听的服务器和处理的应用程序(应用程序是主模块)。

server.js:

(这是唯一可能创建的对象):

应用程序.js:

这里有什么问题:事件没有触发还是听众没有听?
它也可能只是我想念的东西。你知道他们怎么说两个头...

蒂亚:)

0 投票
1 回答
88 浏览

node.js - nodejs 事件原型及其范围使用 that = this

我正在尝试使用其事件系统在 Nodejs 中进行开发。我已经实现了以下代码并且它通过了我的测试(使用 mocha)。that但是,由于变量的范围,我不确定它是否可以在生产环境中工作。

在我的代码中,我分配that=this. 之后我将config对象分配给that.config并且回调发出事件而不将配置作为参数传递。然后侦听器函数使用that.config发出另一个信号。缓存对象是对 redis 数据库的请求。

问题是:that.config当我发出信号时,对象是否总是引用范围,或者它是否可以在第一个发出的信号之后但在第一个侦听器使用之前that.config(在另一个回调中)被另一个请求(获取另一个配置)修改?

配置对象的示例:

0 投票
8 回答
80630 浏览

node.js - NodeJS:如何调试“检测到 EventEmitter 内存泄漏。添加了 11 个侦听器”

如何调试引发此错误的应用程序:

我找不到假设的泄漏对象来增加监听器限制 .setMaxListeners(0);

解决方案(来自 fardjad 和 jan salawa)

通过 jan salawa 的搜索,我找到了一个工作库 ( longjohn ),用于增加堆栈跟踪的详细程度。根据 fardjad 的回复,我发现我们必须对EventEmitter.addListener AND EventEmitter.on进行原型设计。

使用该解决方案,我可以获得这个新的跟踪:

0 投票
1 回答
1686 浏览

node.js - Node.js 将函数委托给导入的模块

目前我有一个具有以下形式的 Node.js 模块:

但是,通过注册的任何回调on在我调用时都不会被调用emitSomething

我可以通过将最后一行更改为

有没有理由我不能将 on 函数委托给另一个模块中定义的函数?

0 投票
1 回答
4773 浏览

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

尝试在函数中设置侦听器时出现错误。我已经查看了其他适用的代码,但似乎无法让它为我的目的工作。

这是我试图完成的简化版本。

我无法让它运行 _getQueue 的函数。当我放入侦听器 _getQueue() 时,它将运行该函数,但会引发错误(TypeError:侦听器必须是一个函数)。我不确定我做错了什么,因为我已经看到以这种方式编写的其他代码有效。

我已验证我已使用 this.on('newListener' . . . ) 设置了侦听器。我假设因为我可以让它在更改侦听器上的名称时调用该函数,所以发射器也在执行它的工作。

请注意,此 ticketGenerator 函数正在使用 requires 从另一个文件中调用。我不知道这是否会影响此问题的解决方案,但我认为细节可能很重要。

---------------------------- EDIT---------------- 我在发布此内容后最终弄清楚了这一点。我需要调用一个构造函数来让这些事件通过。代码如下所示。

由于代表,我无法回答我自己的问题,但我会尽可能更新答案区域。

0 投票
1 回答
110 浏览

javascript - Node.js 在运行函数时设置“this”

我正在 Node.js 中创建一个具有导出类函数构造函数的模块。我在该类中添加了 2 个原型函数,但我也有一堆独立的函数。

我在类内部用作事件和回调处理程序的普通函数。我不想将这些函数作为类原型的一部分公开。

在独立函数的链接中,我想引用构建模块的主类,以便我可以发出事件(我使用过util.inherits(myclassconsructor, EventEmitter))。但在我的内在功能this上是不正确的。我尝试为名为 self 的模块创建一个全局变量,并将其self = this作为构造函数的第一行。

然后我检查了如果我这样做self.on("message name", function() {console.log("worked")});,它确实有效。

然后我去了我的主模块,它构造了有问题的模块并创建了上面的模块并绑定到同一个事件。我没有收到模块外的事件...

模块 A

模块 B

发现这个线程似乎是我遇到的问题,但我无法重现结果。node.js eventEmitter + http.request

0 投票
1 回答
1003 浏览

javascript - Node.js server/client module confusion, EventEmitter woes

I'm trying to write a library which can be used in Node.js or on the client-side.

I'm running into two issues:

  1. I can't seem to export it correctly. I'm using this doc. MyClass = exports? and exports or @MyClass = {} doesn't seem to work, so I split up the files for now.

  2. The library emits events; I'm hoping someone can clarify my confusion on how to do this more simply. Follow with me below :)

Node.js:

Library:

Required:

Client-side

EventEmitter is included.

The library file is included in a script and somewhere I do:

Client-side

Backbone.js/Underscore.js are included (not the EventEmitter library above).

The library file is included in a script and somewhere I do:

So, uh, what's the best way to write a library that emits events for both Node and the browser? The EventEmitter library seemed to conflict with Backbone when I had them both included (it needs to work on Node, and with or without Backbone). There's got to be a simpler solution!

0 投票
1 回答
773 浏览

node.js - 如果不调用 removeAllListeners(),EventEmitter 会导致内存泄漏吗?

当我使用 node-imap 模块时,我想到了这个问题。(见https://github.com/mscdex/node-imap

在这个模块中, fetch() 方法将调用一个回调函数,该函数为它提供一个 ImapFetch() 对象,您的代码应该在该对象上侦听“消息”事件。消息事件依次为每个对象传递一个消息对象,其中包含您需要侦听的事件。

这是模块中的示例代码:

如图所示,监听器永远不会被移除。如果进程在运行一次后立即退出,这可能会很好。但是,如果进程长时间运行,代码会重复执行,会不会导致内存泄漏?即,由于监听器永远不会被移除,它们保留所有的 fetch 和 message 对象,即使它们只在命令期间使用。

我的理解不正确吗?

0 投票
1 回答
8471 浏览

node.js - this.emit 不工作,但 self.emit 工作。为什么?

以下 node.js 脚本不起作用

如果我像下面这样调用 emit 方法,它就不起作用

self 只是一个持有 this 引用的变量,为什么会抛出错误?

0 投票
10 回答
22885 浏览

node.js - 连接两个(或 n 个)流

  • 2个流:

    给定可读 stream1和,获取包含连接stream2的流的惯用(简洁)方法是什么?stream1stream2

    我做不到stream1.pipe(outStream); stream2.pipe(outStream),因为这样流的内容就混在一起了。

  • n 个流:

    给定一个发出不确定数量的流的EventEmitter,例如

    获取所有流连接在一起的流的惯用(简洁)方法是什么?