var fs = require('fs')
/**
* 如果三个异步api操作的话 无法保证他们的执行顺序
* 我们在每个操作后用回调函数就可以保证执行顺序
*/
fs.readFile('./data1.json','utf8',function(err,data){
if(err){
throw err
}else{
console.log(data)
fs.readFile('./data2.json','utf8',function(err,data){
if(err){
throw err
}else{
console.log(data)
fs.readFile('./data3.json','utf8',function(err,data){
if(err){
throw err
}else{
console.log(data)
}
})
}
})
}
})
###上面的操作很难看,多个异步嵌套 像一个箭头 为了解决书写难看的问题 使用ES6中的Promise 对象
var fs = require('fs')
/**
* 创建Promise 容器 本身不异步,内部异步
* 1容器一旦创建,开始执行代码
*/
var p1=new Promise(function(resolve,reject){
fs.readFile('./data/a.txt','utf8',function(err,data){
if(err){
//把容器的pending状态改为reject
reject(err)
}else{
//把容器的pending状态改为resolved
//这里调用resove方法实际上就是then 方法传递的那个function
resolve(data)
}
})
})
var p2=new Promise(function(resolve,reject){
fs.readFile('./data/b.txt','utf8',function(err,data){
if(err){
//把容器的pending状态改为reject
reject(err)
}else{
//把容器的pending状态改为resolved
//这里调用resove方法实际上就是then 方法传递的那个function
resolve(data)
}
})
})
var p3=new Promise(function(resolve,reject){
fs.readFile('./data/c.txt','utf8',function(err,data){
if(err){
//把容器的pending状态改为reject
reject(err)
}else{
//把容器的pending状态改为resolved
//这里调用resove方法实际上就是then 方法传递的那个function
resolve(data)
}
})
})
//当p1成功了, then //根据参数顺序调用的
//then方法接收的function 就是 上面的resolve函数
//当p1成功 ruturn的结果就可以在后面then中的function中接收到
//我们可以return一个promise对象
//当return 一个promise对象 则后面then中的参数1作为p2的resove ,第二
//个参数作为p2的reject
p1
.then(function(data){
console.log(data)
return p2
},function(err){
console.log('error'+err)
})
.then(function(data){
console.log(data)
return p3
})
.then(function(data){
console.log(data)
})