Node.js的事件循环

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值