回调函数

回调函数称为回调,将一个函数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.

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议