Node.js的事件循环

来源:互联网 发布:电机压面机淘宝 编辑:程序博客网 时间:2024/04/29 08:33

Node.js的事件机制

  1. Node.js是单进程单线程应用程序,但是痛过事件和回电支持并发。

  2. Node.js的每一个API都是一步的,并作为一个独立的线程运行,使用一步异步函数回调,并处理。

  3. Node.js 基本上所有的事件机制都是用设计模式中的观察者模式实现的

  4. Node.js 当线程类似进入一个while的事件循环,直到没有事件观察者推出,妹进入异步事件都会生成一个观察者,如果有事件发生就调用该函数

事件驱动程序 ##

事件驱动程序的主要参与者有两个EventEmitters对象和EventHandlers(回调函数)。

我们设置一个事件,主要通过以下流程

1.引入events模块 ,实例化EventEmitter类来绑定和监听事件

//引入events模块var events = require('events');//创建eventEmitter对象var eventEmitter = new events.EventEmitter();

2.绑定事件处理程序(函数),绑定函数有两种方式,一种直接绑定已知的函数名,一种是绑定匿名函数

//创建事件处理函数var connectHandler = function connected(){  console.log('连接成功');}//绑定connectHandler到connection事件上eventEmitter.on('connection',connectHandler);//使用匿名函数绑定data_received事件eventEmitter.on('data_received',function(){  console.log('数据接收成功。');})

3.通过EventEmitter.emit函数来触发事件,回调函数

//触发上面绑定的connection事件eventEmitter.emit('connection');//触发上面绑定匿名函数的data_received事件eventEmitter.emit('data_received');

详细代码如下:

// 引入 events 模块var events = require('events');// 创建 eventEmitter 对象var eventEmitter = new events.EventEmitter();// 创建事件处理程序var connectHandler = function connected() {   console.log('连接成功。');   // 触发 data_received 事件    eventEmitter.emit('data_received');}// 绑定 connection 事件处理程序eventEmitter.on('connection', connectHandler);// 使用匿名函数绑定 data_received 事件eventEmitter.on('data_received', function(){   console.log('数据接收成功。');});// 触发 connection 事件 eventEmitter.emit('connection');console.log("程序执行完毕。");

Node执行异步操作

Node里面我们经常会使用内置的异步回调操作,回调函数接收错误对象作为第一个参数。如下面代码的err就是错误信息作为参数

var fs = require("fs");fs.readFile('input.txt', function (err, data) {   if (err){      console.log(err.stack);      return;   }   console.log(data.toString());});console.log("程序执行完毕");

如果读取文件过程发生错误,错误err对象就会输出错误信息,如果没有发生错误,readFile跳过err对象,文件内容会通过回调函数的参数data输出。

0 0