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();