node.js - 为什么 Node.js 不持续监听事件?

标签 node.js events

我假设 Node.js 持续监听事件并在事件触发时异步处理监听器代码。

我尝试使用“事件”模块定义一个自定义事件,该模块在脚本中手动发出。

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

myEmitter.on('someEvent', function(msg){
console.log(msg);
});

myEmitter.emit('someEvent', 'the event is emitted');

当我运行上述脚本时,进程仅在处理一次事件后终止。 Node.js怎么知道以后不会再有更多的事件可以触发了呢?我已经看到 'http' 模块的 server.listen() 连续监听传入连接并且在获得第一个连接后不会终止。为什么我的代码的行为方式不同?

或者换句话说,我如何定义异步和连续监听的事件?

编辑:我还想知道不可预测的事件(例如浏览器按钮点击、服务器获得连接等)是如何在幕后工作的,以便程序连续运行而不会终止。

最佳答案

我们在这里谈论的是两件不同的事情。事件和套接字。

在您的例子中,您是在告诉 Node ,当名为 someEvent 的事件出现时,您想要处理它。然后你发出这个事件。当你这样做时,node.js 会看到它有一个自定义处理程序并调用你的函数。当你的函数结束时,程序中没有更多的事情要做,它就终止了。

Node.js 不会主动等待像这样的事件:

while (1) {
  if (isThereANewEvent()) treatTheNewEvent();
}

这是一种被动等待。


另一方面,套接字是 I/O,当您启动服务器时,它有一个事件等待。这就是为什么您的程序在调用 .listen

后不会终止的原因

关于node.js - 为什么 Node.js 不持续监听事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54089738/

相关文章:

javascript - 从下拉列表中获取值以显示表nodejs

events - getWindowManager().getDefaultDisplay().getHeight() 和 MotionEvent.get() 返回不同的值?

加载另一个页面后的 jQuery 运行时就绪事件

vb.net - 在 VB.NET 中检测音乐是否结束

node.js - Google Sheets API NodeJS - 在不更改格式的情况下更新单元格

node.js - Visual Studio 2015 社区中的 Aurelia bundle

javascript - 重命名 node.js Sequelize 时间戳列

javascript - 通过 Promise.then 混契约(Contract)步和异步不起作用

javascript - 如何在特定时间段内仅检测一次滚动/滚轮事件?

javascript - 自定义事件记录倍数