使用ES6中一个函数(promise)来解决回调地狱。
- 先说一个场景
就是我想顺序去读啊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);
})
- 这样写是不是就复杂度没那么高了,而且我们还得到了想要的结果
我们还可以更高级一点,封装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);
})
这样看上去是不是更优雅了。到这结束了,有问题再补充