promise封装

promise
为了 解决编码方式带来的问题 (回调地狱嵌套)
es6 新增api:promise (承诺 保障)是一个js的构造函数 不是node的

promise是一个容器
容器中存放了一个异步任务()

1.创建promise容器给别人一个承诺 一旦创建就执行里面的代码
//异步的 不是立即得到结果

new promise(function(){
	fs.readfile('','utf8',function(err,data){
		if(err){
			//失败了承诺容器中的任务失败了
			else{
			//成功了
			}
		}
	})
})

promise本身不是异步但是里面一般封装异步函数

var fs=require('fs')
//Promise一旦创建 立即执行里面的代码 但是里面一般放异步函数
//promise不是异步 promise封装异步函数
var p1=new Promise(function(resolve,reject){

    //这是一个异步函数
	fs.readFile('./a.txt','utf8',function(err,data){
		if(err){
			//失败了承诺容器中的任务失败了
            reject(err)//把容器的pending状态改为rejacted
        }
		else{
			//成功了
            resolve(data)//把容器的pending状态改为resolved
            //console.log(data)
			}
	})
})

var p2=new Promise(function(resolve,reject){
	fs.readFile('./b.txt','utf8',function(err,data){
		if(err){
			//失败了承诺容器中的任务失败了
            reject(err)//把容器的pending状态改为rejacted
        }
		else{
			//成功了
			resolve(data)//把容器的pending状态改为resolved
			}
		})
})


var p3=new Promise(function(resolve,reject){
	fs.readFile('./c.txt','utf8',function(err,data){
		if(err){
			//失败了承诺容器中的任务失败了
            reject(err)//把容器的pending状态改为rejacted
        }
		else{
			//成功了
			resolve(data)//把容器的pending状态改为resolved
			}
        })
    })

//p1是那个承诺 
//当p1成功了 然后(then)做制定的操作
p1.then(function(data){
	//这个function()就是容器中的resolve函数
	//当前函数return的结果就是后面then中的function
	console.log('读取文件成功了',data)
	//return123 后面就接收123
	//return p2 就是接收一个对象
	//没有return 接受的是undefine
	//真正有用的是 return一个promise对象
	//当return
	return p2
	},function(err){
	console.log('读取文件夹失败了',err)
})
.then(function(data){
	console.log(data)//123
	return p3
  })
.then(function(data){
	console.log(data)//123
	console.log('end')
})

	//当p1读取成功 

当前函数return的结果被传到下一个then中

封装了以后

//解决回调嵌套的问题
//封装promise api

var fs=require('fs')


function pReadfile(){
    return new Promise(function(resolve,reject){
        fs.readFile(filePath,'utf8',function(err,data){
            if(err){
                reject(err)
            }
            else{
                resolve(data)
            }
        })
    })
}
pReadFile('./a.txt')
    .then(function(data){
        console.log(data)
        return readFile('./b.txt')
    })
    .then(function(data){
        console.log(data)
        return readFile('./c.txt')
    })
    .then(function(data){
        console.log(data)
        //return readFile('./c.txt')
    })

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值