# 一、回调函数
# 1.异步读取文件
var fs = require('fs');
fs.readFile('file.txt','utf-8',function(err,data){
if(err){
console.log(err);
}else{
console.log(data);
}
});
console.log('end');
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
运行结果:
"end"
"fileContent"
1
2
2
# 2.同步式读取文件
var fs = require('fs');
var data = fs.readFileSync('file.txt','utf-8');
console.log(data);
console.log('end');
1
2
3
4
2
3
4
运行结果:
"fileContent"
"end"
1
2
2
# 3.分析
异步调用时所做的工作只是将异步式I/O请求发送给了操作系统,然后立即返回并执行后面的语句,执行完以后进入事件循环监听事件,当fs接收到I/O请求完成的事件时,事件循环会主动调用回调函数完成后续工作。 同步则是阻塞等待完成后,继续执行。
# 事件
# 1.普通事件的使用
//声明事件对象
var EventEmitter = require('events').EventEmitter;
var event1 = new EventEmitter();
//注册事件
event1.on('cky_event',function(){
console.log('这是一个自定义事件');
});
//触发事件
setTimeout(function(){
event1.emit('cky_event');
}, 1000);
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
执行结果:
//1s后
"这是一个自定义事件"
1
2
2
# 2. node.js的事件循环机制
Node.js在什么时候进入事件循环呢? 答案是Node.js程序是由事件循环开始,一直在寻找有没有新的没有处理的事件,然后一次去执行处理,直到事件循环结束,所有的逻辑都是事件的回调函数。
如何使用自定义事件呢? 事件的回调函数在执行过程中,可能会发出IO请求或直接发射(emit)事件,执行完成后再返回这个事件的循环。