const fs = require('fs');
//第一种的常用的回调函数,本身没有什么问题,但是问题是出现多个回调函数的嵌套式时,会形成回调地狱,既不利于读也不利于管理
function fn() {
fs.readFile('./req.html',(err,data)=>{
if(err){
return err;
}else{
console.log(data.toString());
fs.readFile('./req.js',(err,data)=>{
if(err){
return err;
}else{
console.log(data.toString());
}
})
// return data;
}
})
}
fn();
//第二种用promise处理的异步回调,他只是回调的改进的写法,最大的问题就是代码冗余问题,加入then使得语义变得不清楚
function readFile(url) {
return new Promise((resolve,reject)=>{
fs.readFile(url,(err,data)=>{
if(err) reject(err);
else{
resolve(data.toString());
}
})
})
}
readFile("./req.html").then(data=>{
console.log(data);
return readFile("./req.js");
}).catch(err=>{
console.log(err);
}).then(data=>{
console.log(data);
}).catch(err=>{
console.log(err);
});
//第三种方法:generator处理回调的方法
function generatorFile(url) {
fs.readFile(url,(err,data)=>{
if(err) return err;
else{
console.log(data.toString());
gen.next();
}
})
}
function* generatorRead() {
yield generatorFile('./req.html');
yield generatorFile('./req.js');
}
var gen = generatorRead();
gen.next();