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')
})