回调地狱,Promise解决回调地狱

1、npm init -y
2、npm install Promise
3、readFile是异步函数,因此执行读取a.txt、b.txt、c.txt三个文件顺序不确定
4、如果想要按照先读取a文件,再读取b文件,再读取c文件顺序
5、需要层层嵌套,出现回调地狱,也可以使用Promise解决回调地狱
var fs = require('fs');

var p1 = new Promise(function (resolve,reject) {
fs.readFile('./a.txt','utf8',function (err,data) {
if(err){
reject(err)
}
resolve(data)
})
});

var p2 = new Promise(function (resolve,reject) {
fs.readFile('./b.txt','utf8',function (err,data) {
if(err){
reject(err)
}
resolve(data)
})
});

var p3 = new Promise(function (resolve,reject) {
fs.readFile('./c.txt','utf8',function (err,data) {
if(err){
reject(err)
}
resolve(data)
})
});

p1
.then(function (data) {
console.log(data); //p1的data
return p2;
},function (err) { //p1的err
console.log('读取文件失败了...',err)
})
.then(function (data) {
console.log(data); //p2的data
return p3;
},function (err) {
console.log(err) //p2的err
})
.then(function (data) {
console.log(data); //p3的data
},function (err) {
console.log(err) //p3的err
});


封装
var fs = require('fs');

function pReadFile(dbPath) {
return new Promise(function (resolve,reject) {
fs.readFile(dbPath,'utf8',function (err,data) {
if(err){
reject(err)
}else{
resolve(data)
}
})
})
}

pReadFile('./a.txt')
.then(function (data) {
console.log(data);
return pReadFile('./b.txt')
})
.then(function (data) {
console.log(data);
return pReadFile('./c.txt')
})
.then(function (data) {
console.log(data)
});

猜你喜欢

转载自www.cnblogs.com/xushan03/p/11962574.html