需求:在本地有一个文件,判断如果这个文件存在的话,就把该文件删除后在创建一个新的文件,如果不存在就直接创建 。
/**
* Created by 黄森 on 2017/6/3.
*/
// 引入文件操作fs模块
const fs = require("fs");
console.time('timer');
fs.stat('./list.md', (err, stats) => { //一
if (err) {
console.log("文件不存在");
fs.writeFile('./list.md', new Date(), (err) => { //二
if (err) {
console.error(err);
return false
}
console.log("文件创建成功")
});
return false;
}
//存在的话删除
fs.unlink('./list.md', (err) => {
if (err) {
console.error(err);
return false
}
fs.writeFile('./list.md', new Date(), (err) => {
if (err) {
console.error(err);
return false
}
console.log("文件删除后创建成功")
})
})
});
console.timeEnd('timer');
执行过程
首先一个线程从上往下开始执行代码,当遇到
fs
调用的函数之后就比较特殊了,它是事件驱动的,它里面有一个事件队列,所谓的事件队列就是一个键值的结构,node
在执行的过程中遇到函数调用,就把该函数放到事件队列里面,然后去执行它的回掉函数,档执行到最后的时候,又回到事件队列去找,找到上一次执行回掉函数里面的函数操作,然后上一次的回掉函数销毁,依次类推,依次执行。
在举个例子,代码如下:
那么这个程序函数的执行:当执行到第一个
fs.stst
的时候添加到事件队列中,即添加fs.stat(a)=>ststCallback1
,当执行到第二个的时候把fs.stat(b)=>ststCallback2
页添加到事件队列中,最后执行到consonle.timeEnd('timer')
后执行完了,完了之后又回到事件队列去找第一个fs.stat(a)=>ststCallback1
,找到它里面fs.readFile(a)
这个函数,添加到事件队列中执行完,然后fs.stat(a)=>ststCallback1
销毁,去找到fs.stat(b)=>ststCallback2
中fs.readFile(b)
这个函数,执行完后fs.stat(b)=>ststCallback2
销毁,接着又去事件中去找执行fs.readFile(a)
的回掉函数,执行完之后去执行fs.readFile(b)
的回掉,就这样来回的跳。