es6裡面處理多層回撥的多種方法及其缺點
阿新 • • 發佈:2019-01-25
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();