📜  Node.js事件循环

📅  最后修改于: 2020-12-24 06:10:39             🧑  作者: Mango

Node.js事件

在Node.js应用程序中,事件和回调概念用于提供并发性。由于Node.js应用程序是单线程的,Node js的每个API都是异步的。因此,它使用异步函数来维护并发。节点使用观察者模式。节点线程保持事件循环,并在完成任何任务后触发相应的事件,该事件表示要执行事件侦听器函数。

事件驱动编程

Node.js使用事件驱动的编程。这意味着,一旦Node启动其服务器,它就简单地初始化其变量,声明函数,然后简单地等待事件发生。这是Node.js与其他类似技术相比非常快的原因之一。

事件驱动的应用程序中有一个主循环,它侦听事件,然后在检测到其中一个事件时触发回调函数。

事件和回调之间的区别:

尽管事件和回调看起来很相似,但是不同之处在于,当异步函数返回其结果时,回调函数会被调用,而事件处理是在观察者模式下进行的。每当触发事件时,其侦听器函数开始执行。 Node.js通过事件模块和EventEmitter类提供了多个内置事件,这些事件用于绑定事件和事件侦听器。

EventEmitter类绑定事件和事件侦听器:

// Import events module
var events = require('events');
// Create an eventEmitter object
var eventEmitter = new events.EventEmitter();

要将事件处理程序与事件绑定:

// Bind event and even handler as follows
eventEmitter.on('eventName', eventHandler);

要触发事件:

// Fire an event 
eventEmitter.emit('eventName');

Node.js事件示例

文件:main.js

// Import events module
var events = require('events');
// Create an eventEmitter object
var eventEmitter = new events.EventEmitter();

// Create an event handler as follows
var connectHandler = function connected() {
   console.log('connection succesful.');
  
   // Fire the data_received event 
   eventEmitter.emit('data_received');
}

// Bind the connection event with the handler
eventEmitter.on('connection', connectHandler);
 // Bind the data_received event with the anonymous function
eventEmitter.on('data_received', function(){
   console.log('data received succesfully.');
});
// Fire the connection event 
eventEmitter.emit('connection');
console.log("Program Ended.");

现在,打开Node.js命令提示符并运行以下代码:

node main.js