回调函数
回调函数称为回调,将一个函数a作为参数传入另外一个函数b中,根据时机或者条件决定是否调用a函数
同步与异步
同步:上一行执行完以后,下一行才能得到执行
异步:将比较复杂的任务以任务线程实现,不用等上一个执行完,下一个也能执行
setTimeout
最小时间
在Windows上该函数最小执行时间为15ms,因此即便设置
setTimeout(fn,0);
在windows上也会设置为15ms,苹果系统上为10ms
异步事件轮询机制
异步的实现
1.回调函数
2.事件
事件源.on('事件名称',回调函数)
3.promise
是ES6中新增的承诺对象,用于对异步的操作进行消息的传递
状态:
Pending 等待中
Resolved 成功
Rejected 失败
Pending => Resolved
Pending => Rejected
由于异步的时间不可控,所以要用promise来同一控制输出结果
example:
定义promise对象
var pro1 = new Promise(function(resolve,reject){
fs.readFile('文件名',function(err,data){
if(err){
reject('数据找不到');
}else{
resolve(data.toString());
}
});
});
调用promise对象
p1.then(function(data){
console.log('数据',data);
}.function(err){
console.log('error',err);
});
回调函数不一定是异步,异步一定是回调函数
缓存区
在内存中开辟一个临时区域用于存储需要运算的字节码
创建缓存区
创建指定长度的缓存区
var buf=new Buffer(大小);
按指定字符串建缓存区
var buf=new Buffer([]);
写入缓存区
buf.write('字符串');
读取缓冲区
buf.toString();
复制(将buf1中的内容复制给buf2)
buf1.copy(buf2);
文件系统
读取文件,由于是服务器程序因此node.js必须要有文件读写操作
1.直接读取
将所有内容读取完成后才执行回调函数
同时也分为异步和同步
2.流式读取
读取文件内容
fs.readFile("文件名",回调函数);
fs.readFile('文件名',function(err,data){
console.log(data.toString());
});
上述代码块为异步
几乎所有的fs函数都有同步版本,只要在异步函数后面添加Sync
读取文件信息
fs.stat("文件名",function(err,state){
console.log(state); //即输出文件具体信息
});
size:文件大小
mtime: 文件修改时间
birthtime 文件创建时间
isFile()
判断当前查看的对象是否为一个文件
isDirectory()
判断当前查看的对象是否为目录
删除文件
fs.unlink(path,callback)
删除链接即删除
但是如果不继续写入内容的话,原内容其实还是在的
回调函数必须手动抛出错误。因为其本身是不会自己抛出错误的
if(err)
{
throw err;
}
删除空目录
fs.rmdir()
流
读取
一节一节读取,一节是65536字节即64KB
创建一个可以读取的流
var stream=fs.createReadStream('文件路径');
写入
创建一个可写入的流
var stream=fs.createWriteStream('文件路径');
stream.write('内容');
向输出流中写入内容
stream.end();
以流的方式写入数据必须显示的声明结束
stream.on('finish',function(){
});
绑定error事件
stream.on('error',function(a){
console.log(a);
});
绑定data事件
stream.on('data',function(a){
//可以输出读取到的数据
});
管道
是node.js中流的实现机制,直接定义一个输出流,导出输入流
可以实现大文件的复制
语法:
OutputStream.pipe(InputStream);
Q.E.D.
Comments | 0 条评论