es6里面处理多层回调的两种方法及其缺点

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


猜你喜欢

转载自blog.csdn.net/qq_37016928/article/details/80714484