回调地狱之终极解决方案promise

使用ES6中一个函数(promise)来解决回调地狱。

  1. 先说一个场景

就是我想顺序去读啊a,b,c这三个文件,
那我们正常的做法是不是就是这样的

 fs.readFile('./a.txt','utf-8',function(err,data){
	console.log(data);
	 fs.readFile('./b.txt','utf-8',function(err,data){
	    console.log(data);
	     fs.readFile('./b.txt','utf-8',function(err,data){
	       console.log(data);
          }}}

是不是就这样了。如果我要顺序读100个这样的文件呢,
在这里插入图片描述
这样复杂度是不是就越来越大了。

解决地狱式回调

直接上代码

var p1 = new Promise(function(res,rej){
         fs.readFile('./aaa.txt','utf-8',function(err,data){//这里为异步操作
                    if(err){
                        rej(err);
                    }else{
                        res(data)
                    }
         })   


})

var p2 = new Promise(function(res,rej){
    fs.readFile('./bbb.txt','utf-8',function(err,data){
               if(err){
                   rej(err);
               }else{
                   res(data)
               }
    })   


})
var p3 = new Promise(function(res,rej){
    fs.readFile('./ccc.txt','utf-8',function(err,data){
               if(err){
                   rej(err);
               }else{
                   res(data)
               }
    })   


})

p1.then(function(data){
    console.log(data);
    return p2;//返回一个Promise对象
    
}).then(function(data){
    console.log(data);
    return p3
}).then(function(data){
    console.log(data);
    
})

  1. 这样写是不是就复杂度没那么高了,而且我们还得到了想要的结果

我们还可以更高级一点,封装promise读取文件,这样写

function readPromise(file) {
    return new Promise(function (res, rej) {
        fs.readFile(file, 'utf-8', function (err, data) {
            if (err) {
                rej(err);
            } else {
                res(data)
            }
        })

    })
}


readPromise('./aaa.txt').then(function (data) {
    console.log(data);
    return readPromise('./bbb.txt');
}).then(function (data) {
    console.log(data);
    return readPromise('./ccc.txt');
}).then(function (data) {
    console.log(data);

})

这样看上去是不是更优雅了。到这结束了,有问题再补充

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

new 前端

请博主喝杯咖啡吧!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值