一、回调函数
1)什么是回调函数?
回调函数也称为回调(callback),其实就是一个普通函数。将该函数作为另外一个函数的参数传入,由另外一个函数根据条件调用。
2)回调函数的实现机制
a. 定义一个普通函数(作为回调函数)
b. 将该函数作为参数传入另外一个函数中(调用者)
c. 调用者函数在具体的时机或条件达到时,调用该函数(俗话说:回过头再调用)
3)回调函数的作用
如果我们需要在某个任务完成后,执行一段代码,可以使用回调函数
function A(){
//...
}
function B(a,A){
//...
}
//则A为回调函数,B为调用者
二、异步与同步
1)什么是同步与异步?
同步:前一个任务完成后,后一个任务才能继续执行(会造成阻塞)
异步:将比较复杂的任务制作成异步模式(回调函数),这时后一句代码不需要等前一句代码执行完毕也可以执行(不会造成阻塞)
2)异步的实现
a. 回调函数
异步一定有回调函数,但回调函数不一定都是异步,一些同步情况也会用到回调函数。
b. 事件
触发事件后执行一个函数,就是异步
如: 事件源.on(事件类型,回调函数); (这和前端中的监听事件类似)
c. promise承诺对象(难...)
实现异步的消息传递
三、Buffer缓存区
1)什么是缓存区?
缓存区就是在内存中开辟存储空间,用于存储数据
2)缓存区操作
a. 创建新的缓存区
var buf = new Buffer(10);
//这里创建了一个能存储10字节数据的缓存区
var buf = new Buffer([97,98]);
//创建指定字节码的缓存区,这里存储了字母'a'和'b'
var buf = new Buffer("你好!");
//自动创建该字符串大小的缓存区,并存储该字符串
b. 读取缓存区
buf.toString();
//将字节码转换成看得懂的字符串
c. 写缓存区
buf.write('字符串');
//能写数字或字符串,但不能写入数组
d. 复制缓存区
buf1.copy(buf2);
//将buf1复制给buf2
四、文件和目录基本操作(直接操作)
1)读取文件内容
a. 异步模式读取
var fs = require('fs');
//首先引入文件模块
fs.writeFile('./file.txt',function(err,date){
if(err){
throw err;//抛出错误
//err为错误对象,如果有错则有值(可以抛出错误),否则为null
}else{
console.log(date);
//date为获取到的数据(字符串)
}
});
b. 同步模式读取(只要在异步方法名后加 Sync 就是同步版本)
var fs = require('fs');
var date = fs.writeFileSync('./file.txt');
console.log(date);
//此时若读取文件出错,系统则会自动报错,并停止执行下一步
//而异步模式若读取文件出错,则不会自动报错,需要手动抛出错误
2)读取文件信息
var fs = require('fs');
fs.stat('文件路径',function(err,info){
//info对象就是文件的信息
// .size 文件大小
// .ctime 文件创建时间
// .mtime 文件修改时间
// .atime 文件访问时间
// .birthtime 文件的创建时间
//*注:这里的时间都采用格林尼治时间,我们东八区要加8小时
//info对象操作方法
// .isFile() 判断是否为文件,如果是则返回true,否则返回false
// .isDirectory() 判断是否为一个目录,如果是则返回true,否则返回false
});
3)写入文件(新增、修改)
var fs = require('fs');
fs.writeFile('文件路径',数据,function(err){
//如果文件存在则修改
//如果文件不存在则新增
});
4)删除文件
var fs = require('fs');
fs.unlink('文件路径',function(err){
//...
});
5)新增目录
var fs = require('fs');
fs.mkdir('目录路径',function(err){
//...
});
6)读取目录中的文件列表
var fs = require('fs');
fs.readdir("./hello",function(err,list){
if(err){
throw err;
}else{
//list为读取到的当前目录下所有文件及子文件夹列表,是一个数组
list.forEach(function(v,i){
console.log(v);
});
console.log("读取目录成功!");
}
});
7)删除空目录
var fs = require('fs');
fs.rmdir('目录路径',function(err){
//...
});
//*注:这里只能删除空目录,非空目录不能删除
8)其它操作
如:修改文件或目录名(fs.rename())详情可以参考官方文档
五、文件流式读写(※)
未完待续...