回调地狱是什么?如何解决?

层层嵌套的异步函数的操作叫做回调地狱,它不便于代码的维护,相当复杂。

那么我们又该如何解决回调地狱呢?

我们可以用promise解决。

那么promise有什么状态呢?

pending: 初始状态,既不是成功状态,也不是失败状态
fulfilled: 操作成功完成
rejected: 操作失败

注意:Promise本身只是个容器,不是异步的,其中要完成的任务才是异步的。

then方法接受的第一个函数的参数,对应着生成Promise函数中接收的resolve;第二个函数的参数,对应着reject.

then方法的执行结果是一个promise。我们可以连接任意一个then,前一个then的回调结果将作为参数传递给下一个then回调。

那么接下来便是我们需要解决回调地狱的操作

var p1 = new Promise((resolve, reject) => {
    fs.readFile('./views/demo1.html', (err, data) => {
        if (err) {
            reject(err);
        }
        resolve(data);
    })
})

var p2 = new Promise((resolve, reject) => {
    fs.readFile('./views/demo2.html', (err, data) => {
        if (err) {
            reject(err);
        }
        resolve(data);
    })
})


p1.then((data) => {
    console.log(data.toString());
    return p2;
}, (err) => {
    console.log('错误', err)
}).then((data) => {
    console.log(data);
} )

然后我们进行封装

function pReadFile(path) {
    return new Promise((resolve, reject) => {
        fs.readFile(path, (err, data) => {
            if (err) {
                reject(err);
            }
            resolve(data);
        })
    })
}

var p1 = pReadFile('./views/demo1.html');
var p2 = pReadFile('./views/demo2.html');


p1.then((data) => {
    console.log(data.toString());
    return p2;
}, (err) => {
    console.log('错误', err)
}).then((data) => {
    console.log(data.toString());
} )

那么我们就此解决回调地狱了,也简化了之前的代码,回调地狱也就说到这里了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值