node.js - Node 做出什么事件顺序保证?

标签 node.js events

我在文档中看到监听器将被执行 "in order"对于给定的事件,但是还有什么其他保证呢?例如,以下代码是否保证按顺序打印 0 到 9,或者这只是当前实现的副作用?

var EventEmitter = require('events').EventEmitter
var ev = new EventEmitter();

ev.on("foo", console.log);

for (var i = 0; i < 10; i++) {
    ev.emit("foo", i);
}

最佳答案

For instance, is the following code guaranteed to print 0 through 9 sequentially

嗯。我认为任何地方的文档实际上都没有保证这一点,但这是事件队列工作的唯一合理方式。如果事件没有按照发送的顺序传递,则可能会导致接收端的逻辑非常困惑。

正如您的问题的评论之一所指出的,在全 JavaScript 的情况下,它不能以任何其他方式工作,因为事件是在 emit() 调用期间同步分派(dispatch)的。对于 native 对象,类似的情况也适用 - 它们需要通过 V8 绑定(bind)调用 emit(),因此最终这些事件也按照 native 代码发送它们的顺序传递。

关于node.js - Node 做出什么事件顺序保证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17751777/

相关文章:

node.js - Chrome 无法连接到 http ://localhost:8080 but http://127. 0.0.1:8080 有效

c# - Web API - 事件通知

javascript - 为什么我无法在循环中添加事件监听器?

javascript - Javascript 是否会为未处理/未捕获的异常触发事件?

node.js - 在 React 上导入 Node 模块

node.js - 将数组转换为 $project 中的字符串(聚合)

javascript - 使用 Javascript 的表格内容的正则表达式

node.js - 错误 : ERR wrong number of arguments for 'set' command

.net - 组合框在显示列表项时,如何将鼠标事件拦截到窗体上的任意位置以隐藏列表?

javascript - 如何在分布式环境中处理 PostgreSQL 触发器