问题标签 [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 回答
302 浏览

javascript - 为发出的事件创建侦听器的关闭问题

我已经实现了一个对象,该对象封装了与外部设备交互的驱动程序。当驱动程序接收到数据时,它会发出一个事件。

开始时,我会加载所有已定义驱动程序的列表。然后我遍历定义以执行以下操作:

  • 创建一个驱动程序实例,
  • 监听驱动程序上的事件,以及
  • 告诉司机连接。

作为已发出事件的侦听器的一部分,我定义了一个函数,该函数传递了有关设备表示的一些详细信息。

但是我的代码似乎有问题。当驱动程序发出事件时,触发的函数仅显示一组详细信息。这些细节是我在创建驱动程序并监听事件的 for 循环中定义的最后一个细节。

我创建了一个测试示例,通过使用几个简单的对象和一个计时器来重现我的问题。这需要在 node.js 中运行才能看到问题。

```

我得到的输出如下:

我希望看到如下:

问题是计时器总是引用最后一个名为 Seigfreid 的对象。

- - 编辑 - -

只是为了使问题清楚,问题似乎与makeOnTimerFunction功能有关。它返回的函数是事件发生时触发的函数。当makeOnTimerFunction被调用时,变量都是有意义的。但是,当事件触发并调用返回的函数时makeOnTimerFunction,变量总是相同的。它们不反映makeOnTimerFunction第一次调用时的值。

0 投票
1 回答
504 浏览

javascript - 用一个事件桥接两个事件监听器

我正在尝试“桥接”两个事件侦听器,以便通过单个事件触发它们。此外,在这个“链”中,我可以将额外的值作为参数传递给后面的听众。

我试图通过如下方式实现它

然而,当我收到以下错误时,这种方法似乎会破坏 EventEmitter

干杯。

PS我使用节点v0.10.5

0 投票
0 回答
42 浏览

javascript - EventEmitter 即使在移除处理程序后也会调用它

我有两个名为 say 的类A,并且B都有两个名为startand的方法done。我创建了这两个类的实例。

我将start事件bdone事件绑定到a.

a发出start所以b.start叫,b发出done所以a.done叫。这个过程一直持续到a.done决定并停止发射start。在只有一个B.

当我创建两个B. b.start比应有的多触发一次。

有趣的是,当我在零毫秒done内发射时,它工作得非常好。setTimeout()

我不确定我是否解释正确。请提出可能是什么原因。我尝试了很多东西,但没有给我一个理由来说明为什么添加有setTimeout帮助。

0 投票
1 回答
2083 浏览

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

有很多示例未events.EventEmitter.call(this)在自定义事件发射器构造函数中使用,而其他示例正在使用它(官方文档):

以我对 JavaScript 的基本了解,我不知道我是否需要它。是否需要调用内部的初始化内容EventEmitter

0 投票
1 回答
1660 浏览

javascript - 子类化 events.EventEmitter 不起作用

如何继承 EventEmitter?我正在尝试以下测试:

节点抱怨'object'没有'on'方法。但是,当检查 Downloader instanceOf EventEmitter 时返回 true。

有人可以解释吗?谢谢!

0 投票
1 回答
12128 浏览

node.js - Nodejs:全局使用 eventEmitter 对象

假设我有 3 个公开的功能:用户、帖子、文章

所有这些都需要将消息发送到一个名为 mediator 的文件,在该文件中设置了所有事件。

目前我在这样做时遇到了麻烦

在中介文件中,我有这样的东西:

在用户、帖子和文章功能中。像这样:

发射被完全忽略,没有错误或任何东西。不确定我是否做得对,所以任何方向都会受到赞赏。不过,期望的回报是按预期工作的。

0 投票
0 回答
685 浏览

javascript - 防止多个排队事件被 EventEmitter 触发

我有一个类的两个实例MyWorker。我将start这些对象的方法绑定到start事件。并且有一系列要处理的项目。emit我为每个对象和start事件分配一个项目。

start 方法中有一些异步 IO 作业,所以一切正常。并且在处理完对象后会发出一个done事件。该done方法检查是否items.length > 0. 如果是,它将下一个项目分配给同一对象并发出start事件。

现在,考虑一个 IO 等待时间非常短或事件没有 IO 操作的情况。一切同步进行。在这种情况下,done甚至在下一个对象获得事件之前就会触发该start事件。将done分配新对象并再次发射start。这就是造成问题的原因。的start第二个对象现在将被调用两次。

知道如何解决这个问题吗?

0 投票
1 回答
1877 浏览

javascript - 事件发射器可以替换 pub/sub

我目前在一个应用程序中使用Publisher.js以及Microee,它是一个微小的 EventEmitter。在我看来,如果我有一个全局 microee 实例,它的使用方式与 pub/sub 大致相同。例如在 Publisher.js 我可以这样做:

在 Microee 我可以做到:

所以我想知道在用事件发射器替换这个特定的发布/订阅用例时我是否遗漏了一些东西。

0 投票
1 回答
690 浏览

javascript - NodeJS 理解事件队列

我的理解是 NodeJS 会一直运行,直到所有事件都从事件队列中排出,然后才会退出。在各种情况下,我编写了一个脚本,它使用第三方模块,它做我想做的事,但不退出。我认为这是因为其他一些第三方模块在事件队列中有一些东西。

我可以做些什么来观察队列,鼓励它被排空,甚至确定谁还有事情要做(也许获得足够的信息来知道如果我无论如何都 process.exit,不会造成任何伤害)

感谢您的建议。

0 投票
2 回答
1235 浏览

node.js - 处理来自 EventEmitter 孩子的所有消息

我有一个继承自 EventEmiter“类”的对象。

它有很多事件 ( emitter.on),我不知道它们的名字。
我怎样才能得到他们的名字?我该如何处理所有事件?