Node.js最大的特点就是异步式I/O也叫非阻塞式I/O与事件紧密结合的编程模式。这种模式与传统的同步式I/O线性的编程思路有很大的不同,因为控制流跟大程度上要靠事件和回调函数来组织,一个逻辑要拆分成若干个单元。太多的理论小伙伴们也是看看的晕晕的。下面我们就用一个I/O读取文件的实例来感受异步与同步以及回调函数的魅力吧。
一.异步IO
1、新建a.txt文件里面内容为:liuwenwen
2. 新建readFile.js里面内容为:
// 读取文件
var fs = require('fs');
fs.readFile('a.txt','utf-8',function(err,data){
if(err){
console.error(err);
}else{
console.log(data);
}
});
console.log('end');
3.执行 node readFile.js
4.结果为:
end
liuwenwen
二.同步IO
1、新建a.txt文件里面内容为:liuwenwen
2. 新建readFileSync.js里面内容为:
// 读取文件
var fs = require('fs');
var data =fs.readFileSync('a.txt','utf-8');
console.log(data);
console.log('end.');
.执行 node readFileSync.js
4.结果为:
liuwenwen
end.
fs.readFile调用时所做的工作只是将异步式I/O请求发送给操作系统,然后立即执行并返回后面的语句。执行完以后进入事件循环监听事件。当fs接受到I/O请求完成时.事件循环会主动调用函数完成后续的工作。因此我们会先看到end再看到文件中的内容。